导航控制器和表视图密不可分,在实际的应用程序中实现导航控制器,几乎总要实现至少一个表,因为导航控制器的强大之处在于它能够处理复杂的分层数据,在iphone上,连续的表视图是表示分层数据最理想的分层方式。
导航控制器使用内置动画在视图之间顺利移动,无需编写历史纪录控制,导航控制器会自动处理Back按钮时间,让用户“岀栈”。
UINavigationController是构建分层应用的主要工具,与UITabBarController很类似,但是前者是以栈来实现功能,关于栈,我们并不陌生,遵守先进后出的原则,向栈中添加一个对象为入栈,从栈中删除一个对象叫出栈。
UINavigationController是构建分层应用程序的主要工具。本次的应用程序将由一个导航控制器和六个子控制器组成。
如何把表视图中的数据写入子表中;
.如何把表视图中的数据写入可以读取甚至可以编辑详细数据的内容视图中;
.如何通过表清单来从多个值中进行选择;
.如何通过编辑模式从表视图中删除行。
下面是触摸顶级试图第一行Disclosure Butttons时出现的界面(第一个视图右侧的扩展图标被称为是扩展指示器,用于告知用户触摸这一行将切换到另一个表视图),其他几个试图都是如此。
在编辑过程中需注意以下几点:
1)列表只显示来自数组的多个行,因此需要声明一个数组实现表视图时需要遵从两个协议UITableViewDelagate和UITableViewDataSource,类需要这两个协议来充当表视图的委托和数据源,然后声明一个数组用于放置将要显示的数据。
@interface Disclosure_Buttons : UIViewController<UITableViewDelegate,UITableViewDataSource>
{
NSArray *listData;
}
2)方法返回数组计数个数:
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [listDatacount];
}
3) 方法获取一个可重用单元,如果单元不存在则创建一个新的单元。然后从对应查询的数组中获取对象,将单元的文本设置成控制器标题并返回单元
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
staticNSString*DisclosureCellIdentifier = @"DisclosureCellIdentifier";
UITableViewCell*cell=[tableView dequeueReusableCellWithIdentifier:DisclosureCellIdentifier];
if (cell == nil)
{//创建一个新的单元
cell=[[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:DisclosureCellIdentifier];
}
//对应查询数组中获取的对象,将单元文本设置成控制器标题并返回单元
NSUInteger row=[indexPath row];
NSString *rowData=[listDataobjectAtIndex:row];
cell.textLabel.text=rowData;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
4) tableView:didSelectRowAtIndexPath:方法是用户单击某行后调用的方法,如果在调用时需要触发信息展开,则调用此方法
5)tableView:editingStyleForRowAtIndexPath
方法是表视图可以查询指定行是否可以进行删除,是否可以将新行插入到指定位置。
通过返回UITableViewEditingStyleNone表示不支持插入和删除行。
6)从属性表中加载数据
-(void)viewDidLoad{
NSString *path=[[NSBundlemainBundle] pathForResoure:@"computers" ofType:@"plist"];
NSMutableArray *array=[[NSMutableArrayalloc] initWithContentsOfFile:path];
self.list=array;
[array release];
[superviewDidLoad];
}
7)UITableViewCellEditingStyleNone:不允许被编辑
UITableViewCellEditingStyleDelete:允许删除
UITableViewCellEditingStyleInsert:允许插入
8)encodeWithCoder:方法把对象编码为归档文件
initWithCoder:方法从归档文件中创建新的对象
9)UITextFieldDelegate:通过遵循这个协议,当用户对某个字段做出修改时,会得到通知并保存修改。