UINavigationController

  • 效果图

如下所示:


UINavigationController_第1张图片
UINavigationController 效果图
  • UINavigationController

UINavigationControllerUIViewController 的子类。该对象的视图有两个子视图:UINavigationBartopViewController 的视图,如下所示:

UINavigationController_第2张图片
两个子视图

当某个应用通过 UINavigationController 对象显示多个屏幕的信息时,相应的 UINavigationController 对象会以栈的形式保存所有屏幕的信息。

这里的栈是一个数组对象,保存的都是 UIViewController 对象。一个 UIViewController 对象的视图对应一个屏幕,只有位于栈顶的 UIViewController 对象,其视图才是可见的。

  • 初始化

初始化 UINavigationController 对象时,需要传入一个 UIViewController 对象作为 UINavigationController 对象的根视图控制器,且一直位于栈底。在 application:didFinishLaunchingWithOptions: 方法中设置的代码如下:

BNRItemsViewController *itemsVC = [[BNRItemsViewController alloc] init];
// 创建 UINavigationController 对象,该对象的栈只包含 itemsVC
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:itemsVC];
self.window.rootViewController = nav;
  • 入栈

将创建的 UIViewController 对象压入 UINavigationController 对象的栈(pushViewController:animated: 方法),示例代码:

BNRDetailViewController *detailVC = [[BNRDetailViewController alloc] init];
// 将新创建的 BNRDetailViewController 对象压入 UINavigationController 对象的栈
[self.navigationController pushViewController:detailVC animated:YES];
  • UINavigationBar

UIViewController 对象有一个名为 navigationItem 的属性,类型为 UINavigationItem. 其作用是为 UINavigationBar 对象提供绘图所需的内容。示意图如下:

UINavigationController_第3张图片
NavigationBar

示例代码:

UINavigationItem *navItem = self.navigationItem;
navItem.title = @"Home Page";

UINavigationItem 除了可以设置 title 属性,还可以设置 leftBarButtonItem, rightBarButtonItemtitleView 属性。示例代码:

UIBarButtonItem *bbi = [[UIBarButtonItem alloc]
              initWithBarButtonSystemItem:UIBarButtonSystemItemAdd
                                   target:self 
                                   action:@selector(addNewItem:)];
navItem.rightBarButtonItem = bbi;
navItem.leftBarButtonItem = self.editButtonItem;
  • 其他

更新代码并返回后,为使用户能立刻看到更新后的数据,需要刷新 UITableView 对象。
重写 viewWillAppear: 方法(添加 reloadData 方法),示例代码如下:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    [self.tableView reloadData]; //重新载入数据
}

代码地址:
https://github.com/Ranch2014/iOSProgramming4ed/tree/master/10-UINavigationController/Homepwner

《iOS编程(第4版)》 笔记

你可能感兴趣的:(UINavigationController)