Day 08 of UI
UINavigationController的建立
AppDelegate.m
// 2. 创建根视图控制器
LoginViewController *loginVC = [[LoginViewController new] autorelease];
// 创建导航控制器
UINavigationController *rootNC = [[[UINavigationController alloc] initWithRootViewController:loginVC] autorelease];
// 将导航控制器设置为根视图控制器
self.window.rootViewController = rootNC;
LoginViewController.m
// 点击登录页面的button,切换到注册页面
#pragma mark - 实现事件
- (void)buttonAction:(UIButton *)sender
{
// 1. 创建注册控制器
RegisterViewController *registerVC = [[RegisterViewController new] autorelease];
// 2. 推出(模态)
// [self presentViewController:registerVC animated:YES completion:nil];
// 使用导航控制器推出新的控制器
// self.navigationController : 当前控制器所属的导航控制器
[self.navigationController pushViewController:registerVC animated:YES];
}
FindPwdViewController.m
// 在第三个页面(找回密码页面)实现的一些功能
- (void)buttonAction:(UIButton *)sender
{
// pop
// 返回根视图控制器
// [self.navigationController popToRootViewControllerAnimated:YES];
// 返回上一页面
// [self.navigationController popViewControllerAnimated:YES];
// 返回到指定的控制器self.navigationController.childViewControllers[0]
// self.navigationController.viewControllers 也表示其子控制器
// 返回的控制器一定不能是新建立的控制器,而是已经在导航中的自控制器
[self.navigationController popToViewController:self.navigationController.childViewControllers[0] animated:YES];
NSLog(@"%@", self.navigationController.topViewController); // 栈顶的控制器
NSLog(@"%@", self.navigationController.visibleViewController); // 当前正显示的控制器(模态推出时,此控制器并不在栈顶)
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
UINavigationController的一些属性
//*AppDelegate.m*
// 隐藏导航烂
// rootNC.navigationBarHidden = YES;
rootNC.navigationBar.tintColor = [UIColor redColor]; // 导航栏左右按钮的渲染颜色
rootNC.navigationBar.barTintColor =[UIColor purpleColor]; // 导航条渲染颜色
[rootNC.navigationBar setBackgroundImage:[UIImage imageNamed:@"bg_64.png"] forBarMetrics:UIBarMetricsDefault];
// 如果图片高度是64,则填充状态栏
// 如果图片是44,不填充状态栏
// 如果图片宽度很小,则会平铺
// *LoginViewController.m*
// 隐藏返回按钮
self.navigationItem.hidesBackButton = YES;
// 设置当前控制器的标题
self.navigationItem.title = @"登录";
// 自定义标题
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(rightBarButtonItemAction:)];
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
UIBarButtonItem *leftBarButtonItem = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"item_bg.png"] style:UIBarButtonItemStyleDone target:self action:@selector(leftBarButtonItemAction:)] autorelease];
self.navigationItem.leftBarButtonItem = leftBarButtonItem;