导航控制器
- UINavigationController 导航控制器,用来管理子控制器
- 其包含:UINavigationBar 导航条
- 管理原则:
push
进如导航控制器,为栈顶控制器,栈顶控制器的View
会被加到导航控制器中用来管理存储View
的地方
UINavigationController
常见属性
///自控制器
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
// The current view controller stack.
@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers;
在Appdeleagte初始化
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//设置窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//
UIViewController *VC = [[CCRootVC alloc] init];
//设置单行控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:VC];
//设置窗口的根视图控制器
self.window.rootViewController = nav;
//窗口k可见
[self.window makeKeyAndVisible];
return YES;
}
CCRootVC
- (IBAction)handlePushNextVAction:(UIButton *)sender {
CCTWOVC *twoVC = [[CCTWOVC alloc] init];
[self.navigationController pushViewController:twoVC animated:YES];
}
–
管理原则
指定导控制器的的根视图控制器
rootVC
,此时导航指控内部调用的是push
方法,把rootVC
压入站顶控制器,rootVC
的View
被存放到导航控制器管理的View
上,此时可以看到rootVC
的粉色View
显示在窗口上,当再次push
进入twoVC
的时候,此时的栈顶控制器是twoVC
,导航控制器会移除rootVC的View
,加入twoVC的view
到导航控制器管理的View上,此时twoVC的View
可以正常显示在窗口上
其原则是:先进后出
导航条内容
导航条的内容是有栈顶控制器的模型属性决定
UINavigationItem
self.navigationItem.title = @"标题";
//设置标题视图
self.navigationItem.titleView = [UIView new];
//设置导航条上的 搜索
self.navigationItem.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
- 设置左边的按钮
//设置导航条左边的按钮
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"cc"] style:UIBarButtonItemStylePlain target:self action:@selector(handleAction)];
//实现handleAction方法,也可以穿参数
- 左边按钮自定义一个View
UIButton *add = [UIButton buttonWithType:UIButtonTypeContactAdd];
//自定义一个左边的按钮View
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:add];
- 左边按钮的数组形式
//存放多个按钮
self.navigationItem.leftBarButtonItems = @[];