iOS开发UI篇 -- UINagivationController

来源:互联网 发布:怎么远程授权php 编辑:程序博客网 时间:2024/04/30 07:38
 为了便于管理控制器,iOS提供了2个比较特殊的控制器
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完毕.......");    }];}




0 0