UINavigationController垂直界面。
初始化UINavigationController对象时,要传入一个UIViewController对象,这个UIViewController对象成为UINavigationController的根视图控制器,永远位于栈底。
将UINavigationController对象设置为UIWindow对象的rootViewController,就将该对象的视图作为子视图加入窗口。
修改AppDelegate.m的第一个方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
BNRItemsViewController *itemsViewController = [[BNRItemsViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:itemsViewController];
self.window.rootViewController = navController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
// Override point for customization after application launch.
return YES;
}
运行应用,屏幕顶部会出现UINavigationBar对象
建立带xib的BNRDetailViewController,添加输入信息用的标签和文本框,把文本框和BNRDetailViewController.m的插座变量建立关联,如下
@interface BNRDetailViewController ()
@property (weak, nonatomic) IBOutlet UITextField *emailField;
@property (weak, nonatomic) IBOutlet UITextField *landLineField;
@property (weak, nonatomic) IBOutlet UITextField *cellPhoneField;
@property (weak, nonatomic) IBOutlet UITextField *nameField;
@end
将由BNRItemsViewController负责创建BNRDetailViewController并把它压入UINavigationController的栈。
在BNRItemsViewController.h里加入
#import “BNRDetailViewController.h”
在选中一行时,把BNRDetailViewController压入栈
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
BNRDetailViewController *detailViewController = [[BNRDetailViewController alloc] init];
[self.navigationController pushViewController:detailViewController
animated:YES];
}
两个视图的数据传递
数据的显示
BNRDetailViewController.h中,为BNRDetailViewController类添加一个属性。
#import
@class BNRItem;
@interface BNRDetailViewController : UIViewController
@property (nonatomic, strong) BNRItem *item;
@end
在BNRDetailViewController.m中导入BNRItem头文件
#import “BNRItem.h”
覆盖viewWillAppear方法:
- (void)viewWillAppear:(BOOL)animated
{
// NSLog(@”%@”, self.item);
[super viewWillAppear:animated];
BNRItem *item = self.item;
self.nameField.text = item.NMTelContactName;
self.cellPhoneField.text = item.NMTelCellPhone;
self.landLineField.text = item.NMTelLandLine;
self.emailField.text = item.NMTelContactEmail;
}
在BNRItemsViewController.m的didSelectRowAtIndexPath方法中添加代码,将选中的BNRItem对象赋给DetailViewController对象。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
BNRDetailViewController *detailViewController = [[BNRDetailViewController alloc] init];
NSArray *items = [[BNRItemStore sharedStore] allItems];
BNRItem *selectedItem = items[indexPath.row];
detailViewController.item = selectedItem;
[self.navigationController pushViewController:detailViewController
animated:YES];
}
编辑后数据的更新
在BNRDetailViewController.m中覆盖viewWillDisappear方法,传递数据
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.view endEditing:YES];
BNRItem *item = self.item;
item.NMTelContactName = self.nameField.text;
item.NMTelCellPhone = self.cellPhoneField.text;
item.NMTelLandLine = self.landLineField.text;
item.NMTelContactEmail = self.emailField.text;
}
在BNRViewController.m中覆盖viewWillAppear方法,刷新数据
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
更改标题
BNRItemsViewController.m的init方法
- (instancetype)init
{
self = [super initWithStyle:UITableViewStylePlain];
if (self){
[[BNRItemStore sharedStore] createContacts];
UINavigationItem *navItem = self.navigationItem;
navItem.title = @”NMTel”;
}
return self;
}
BNRDetailViewController.m中设置导航栏标题
- (void)setItem:(BNRItem *)item
{
_item = item;
self.navigationItem.title = _item.NMTelContactName;
}