导航控制器-1
uinavigationcontroller还有2个子类uiimagepickercontroller和uivideoeditorcontroller.
视图上元素尺寸
顶部状态栏20px
导航栏44/32px
导航栏上按钮图标或者tabbar上按钮图标20*20px
底部tabbar44/32px
导航控制底部还有个toolbar,默认是隐藏的,这个一般不用。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tabBarController.tabBar setHidden:NO];
[self.navigationController setToolbarHidden:NO animated:YES];
}
添加一个tap手势,来实现navigatebar的显示于隐藏
- (void)mytap:(UITapGestureRecognizer *)gesture
{
BOOL flag = self.navigationController.navigationBar.hidden;
[self.navigationController.navigationBar setHidden:!flag];
}
导航控制器的主要属性
1) topViewController和visibleViewContoller都是获取栈顶视图控制器
2)viewControllers是获取导航控制里所有的视图控制器
3)navigationBarHidden获取导航控制栏是否隐藏
4)navigationBar获取导航控制栏
导航控制的常用方法
1)pushxxx把下一个控制器推出来
2)popxxxx把当前控制器推出去
3)poptoXXX把当前控制器弹出去以后再跳到一个控制器
4)poptorootcontroller,把当前视图控制器弹出去,再跳转到根视图控制器
一个导航控制器包含4个对象,uinavigationcontroller,uinavigationbar,uiviewcontroller,uinavigationitem.
一个导航控制器只有一个导航栏uinavigationbar,导航栏上有uinavigationitem,但是uinavigationbar并不控制uinavigationitem.这个uinavigationitem是由每一个视图控制器来控制。
uinavigationbar右侧是可以自定义,
uinavigationbar上的title部分可以设置一个uiview
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.view setBackgroundColor:[UIColor yellowColor]];
UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 44)];
[titleView setBackgroundColor:[UIColor redColor]];
self.navigationItem.titleView = titleView;
}
![](//images0.cnblogs.com/blog/419711/201310/03173117-9a5aef97c7964c3494568368988b1b9f.png)
设置导航栏的一些属性
// 设置风格
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
// 设置颜色
[self.navigationController.navigationBar setTintColor:[UIColor redColor]];
// 设置透明
[self.navigationController.navigationBar setTranslucent:YES];
设置隐藏返回按钮
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.navigationItem setHidesBackButton:YES];
[self.navigationController setToolbarHidden:YES];
}
表明toolbar和navigationbar这些是由navigationcontroller来控制,按钮则是由控制器来控制
prompt提示属性
self.navigationItem.prompt = @"hello world";
设置左右两边按钮
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self.navigationItem setHidesBackButton:YES];
[self.navigationController setToolbarHidden:YES];
//self.navigationItem.prompt = @"hello world";
UIBarButtonItem *leftbtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:nil];
self.navigationItem.leftBarButtonItem = leftbtn;
UIBarButtonItem *rightbtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:nil];
self.navigationItem.rightBarButtonItem = rightbtn;
}
![](//images0.cnblogs.com/blog/419711/201310/03183721-06f4f6a9ede54b249b1794a33e287e24.png)
uibarbuttonitem还可以自定义按钮
有一个initwithcustomview方法,可以设置自定义视图。
自定义返回按钮
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(mytap:)];
[self.view addGestureRecognizer:tap];
UIButton *mybtn = [UIButton buttonWithType:UIButtonTypeCustom];
[mybtn setFrame:CGRectMake(0, 0, 22, 22)];
[mybtn setImage:[UIImage imageNamed:@"返回"] forState:UIControlStateNormal];
UIBarButtonItem *backitem = [[UIBarButtonItem alloc] initWithCustomView:mybtn];
self.navigationItem.leftBarButtonItem = backitem;
}
![](//images0.cnblogs.com/blog/419711/201310/03184734-33de1fccdab2491ba4d312058cd9e6e2.png)
uinavigationbar的背景可以使用一个图片。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationItem.backBarButtonItem setTitle:@"返回"];
UIImage *image = [UIImage imageNamed:@"title"];
UIColor *titleColor = [UIColor colorWithPatternImage:image];
[self.navigationController.navigationBar setTintColor:titleColor];
}
![](//images0.cnblogs.com/blog/419711/201310/03185523-45b5dd7939e3485b8f5f5bb21aab1553.png)
设置navigationbar的背景图片
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationItem.backBarButtonItem setTitle:@"返回"];
UIImage *image = [UIImage imageNamed:@"title"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
![](//images0.cnblogs.com/blog/419711/201310/03193139-7c05ef4164ca4efbbc7689568bf3485d.png)
在navigationbar的标题上添加一个custom按钮
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.navigationItem.backBarButtonItem setTitle:@"返回"];
UIImage *image = [UIImage imageNamed:@"title"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:@"这里是标题按钮" forState:UIControlStateNormal];
[btn setFrame:CGRectMake(0, 0, 120, 30)];
self.navigationItem.titleView = btn;
}
![](//images0.cnblogs.com/blog/419711/201310/03193828-a3a1f0b00b9f4065bc23d5cd32b0428f.png)
这里按钮没有设置图片,按钮的样式是自定义的使用的就是导航控制器的图片。
导航控制器内的toolbar默认是隐藏的。
导航控制器的代理方法,willshow,didshow
可以捕获将要显示的视图控制器,和已经显示的视图控制器
视图控制器代理设置