UINavigationController
UITabBarController
---------------------------------------------------
1、UINavigationController常用属性
UINavigationController以栈的形式保存子控制器
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;
使用push方法能将某个控制器压入栈
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
使用pop方法可以移除控制器
将栈顶的控制器移除
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
回到指定的子控制器 (少用)
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
回到根控制器(栈底控制器)
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
---------------------------------------------------
2、导航控制器通过栈来管理子控制器
导航控制器是通过栈的形式来管理子控制器的(先进后出)
显示在导航控制器上得view永远是栈顶控制器的view
一个导航控制器只有一个导航条,也就是说所有的自控制器公用一个导航条。
显示在导航控制器上面的永远是栈顶控制器的view,在栈中的View是不会被销毁的,当pop出了栈,view才会被销毁
只会有一个导航栏,所以导航栏上面显示什么内容由栈顶控制器决定
但是!有个特例!左上角的返回按钮是由上一个Controller决定的
-------------------------------------------------
3、如何修改导航栏的内容
导航栏的内容由栈顶控制器的navigationItem属性决定
显示在导航控制器上面的永远是栈顶控制器的view,在栈中的View是不会被销毁的,当pop出了栈,view才会被销毁
只会有一个导航栏,所以导航栏上面显示什么内容由栈顶控制器决定
但是!有个特例!左上角的返回按钮是由上一个Controller决定的
UINavigationItem有以下属性影响着导航栏的内容
左上角的返回按钮
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
中间的标题视图
@property(nonatomic,retain) UIView *titleView;
中间的标题文字
@property(nonatomic,copy) NSString *title;
左上角的视图
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
UIBarButtonItem *rightBarButtonItem 右上角的视图
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
4、如何为导航栏添加子控制器
- (IBAction)jump {
// 展示MJTwoViewController,在第二个Vc中添加一个导航栏
MJTwoViewController *two = [[MJTwoViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:two];
[self presentViewController:nav animated:YES completion:^{
NSLog(@"展示MJTwoViewController完毕.......");
}];
}