- 效果图
如下所示:
- UINavigationController
UINavigationController
是 UIViewController
的子类。该对象的视图有两个子视图:UINavigationBar
和 topViewController
的视图,如下所示:
当某个应用通过 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
对象提供绘图所需的内容。示意图如下:
示例代码:
UINavigationItem *navItem = self.navigationItem;
navItem.title = @"Home Page";
UINavigationItem
除了可以设置 title
属性,还可以设置 leftBarButtonItem
, rightBarButtonItem
和 titleView
属性。示例代码:
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版)》 笔记