导航控制器 是基于栈来实现的 它会自动帮我们记录 咱们所需要切换的界面
咱们push(进入下一个页面)的时候 系统会自动 向栈中添加对象
1、首先得初始化一个窗口
self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
1.1初始化一个视图控制器作为导航控制器的根视图
ViewController *viewController=[[ViewController alloc]init];
1.2初始化导航控制器 设置导航控制器的第一个页面(把导航控制器作为窗口的根视图控制器)
UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:viewController];
self.window.rootViewController=nv;
[self.window makeKeyAndVisible];
在ViewController里面
设值背景颜色(如果不设置背景颜色,进入这个页面的时候会卡顿)
self.view.backgroundColor = [UIColor grayColor];
设置导航栏(这一页面的标题)
self.title = @"首页";
设置一个按钮,使他点击跳进下一个页面
UIButton *buttonPush = [UIButton buttonWithType:UIButtonTypeCustom];
buttonPush.frame = CGRectMake(100, 200, 100, 40);
[buttonPush setTitle:@"进入下一页面" forState:UIControlStateNormal];
[buttonPush addTarget:self action:@selector(next) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:buttonPush];
跳转下一个面的方法
- (void)next
{
TWOViewController *two = [[TWOViewController alloc]init];
//通过导航控制器navigationController跳到下一个页面pushViewController这个是下一页面是:
[self.navigationController pushViewController:two animated:YES];
}
设置第二个ViewController,
如果跳进这一个界面出现卡顿,那么就要设置一下背景颜色(如果跳到这个界面 没有设置背景颜色,就会出现卡顿)
在导航栏中,系统自带有返回按钮,但是可以自己改写返回按钮
控制栏上的按钮
UIBarButtonItem *left = [[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target:self action:@selector(back)];
//设置BarButtonItem的颜色
left.tintColor = [UIColor grayColor];
//设置导航栏上的内容
//设置内容里面 左侧按钮的属性
self.navigationItem.leftBarButtonItem = left;
返回上一页的方法
- (void)back
{
[self.navigationController popViewControllerAnimated:YES];
}
返回某一页的方法
viewControllers 记录了 所有push压栈过的viewcontroller
在想返回一个页面 也不想返回首页
[self.navigationController popToViewController: self.navigationController.viewControllers[1] animated:YES];
返回主页的方法
[self.navigationController popToRootViewControllerAnimated:YES];