iOS 定制手机通讯录(3)

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值