导航控制器是一个非常常用的控制器,它能够实现不同窗口的跳转关系,能够很好的描述控制器的层级关系.
从UIWindow创建控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//创建UIWindow
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//创建控制器
ViewController *vc = [[ViewController alloc] init];
//设置控制器背景色
vc.view.backgroundColor = [UIColor redColor];
//创建导航控制器并设置vc为导航控制器的跟控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
//设置导航控制器为UIWindow的跟控制器
self.window.rootViewController = nav;
//显示window
[self.window makeKeyAndVisible];
return YES;
}
从storyboard创建
1.将storyboard中的控制器删掉
2.找到UINavigationController,拖入storyboard中,如果不需要UITableView,可以将其删掉,换成需要的控制器,然后从UINavigationController拖线至所添加控制器,设置其为跟控制器即可.
UINavigationController常用属性
//标题栏文字
@property(nullable, nonatomic,copy) NSString *title;
//标题栏图片
@property(nullable, nonatomic,strong) UIView *titleView;
//返回BarButtonItem
@property(nullable,nonatomic,strong) UIBarButtonItem *backBarButtonItem
//左边BarButtonItem
@property(nullable, nonatomic,strong) UIBarButtonItem *leftBarButtonItem;
//右边BarButtonItem
@property(nullable, nonatomic,strong) UIBarButtonItem *rightBarButtonItem;
//设置导航栏标题
self.title = @"打我啊魂淡!";
//创建图片
UIImage *image = [UIImage imageNamed:@"men"];
//设置图片永不渲染
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//设置右边,action可以监听点击事件
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleDone target:self action:nil];
//设置左边,action可以监听点击事件
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:nil];
效果图:
segue(发音:segui)
segue是控制器跳转的一个重要连接属性,在导航控制器中应用非常广泛.
segue有一个属性:identfier(标识),在使用storyboard时,可通过identfier快速找到你要跳转的控制器.segue有两个非常常用的方法:
//执行sugue的identfier为(NSString *)的连接,创建并加载指定控制器
- (void)performSegueWithIdentifier:(NSString *)identifier sender:(nullable id)sender;
//准备执行Segue,从UIStoryboardSegue创建指定Segue连接
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(nullable id)sender;
一般使用中,使用performSegueWithIdentifier:跳转到指定控制器.该方法会创建通过identfier创建指定类型的控制器,然后加载.
prepareForSegue:方法底层会将当前控制器设置为segue的sourceViewController,需要跳转的指定控制器为destinationViewController.在这个方法中可以用来与目标控制器传值.