本章的demo主要介绍了导航控制器和列表视图的使用,这一部分是在做ios上开发使用频率最高的一部分内容,这里只涉及一些简单的,最基本的方法
//试图控制器读取到内存之后再进行调用,在程序屏幕显示读到内存后加入额外步骤对显示进行修改
- (void)viewDidLoad {
[super viewDidLoad];
listData = [[NSMutableArray alloc] initWithObjects:@"Row01",@"Row02",@"Row03",@"Row04",@"Row05",nil];
UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
initWithTitle:@"Add"
style:UIBarButtonItemStyleBordered //样式为有边距的
target:self
action:@selector(AddButtonAction:)];
self.navigationItem.leftBarButtonItem = addButton;
self.title = @"第 15 天 小型表格";
self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
//单击按钮打开提示框
- (IBAction)AddButtonAction:(id)sender{
UIAlertView *dialog = [[UIAlertView alloc] initWithTitle:@"添加新的一行"
message:@""
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"确定", nil];
rowNameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 38.0, 245.0, 20.0)];
[rowNameField setBackgroundColor:[UIColor whiteColor]];
//提示框dialog的子视图加入rowNameField文本框
[dialog addSubview:rowNameField];
[dialog show];
[dialog release];
[rowNameField release];
}
//单击确定在表格的最后一行添加新的一行
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
//当提示框视图中的取消按钮没有被单击,并且文本框不为空时
if((buttonIndex != [alertView cancelButtonIndex])&&(rowNameField.text !=nil))
{
//定义在可修改的数组中,在数组最后添加新的一行
[listData insertObject:[rowNameField text] atIndex: listData.count];
[self.tableView reloadData];
}
}
//编译标记
#pragma mark -
#pragma mark Table view data source
// 表格中的分组数量方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
//表格总的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//表格行数的数量等于我们数组的内容的个数
if (section == 0) return listData.count;
else return 0;
}
//程序分组,添加每大类的标题名称
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *title = nil;
switch (section) {
case 0:
title = @"表格一";
break;
case 1:
title = @"表格二";
break;
case 2:
title = @"表格三";
break;
case 3:
title = @"表格四";
break;
default:
break;
}
return title;
}
//显示表格中每一行的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//创建一个字符变量CellIdentifier,用于取得文本数据类型
static NSString *CellIdentifier = @"Cell";
//UITableViewCell建立表格中行数的单元格,获取内容的标识符
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//当cell为空时
if (cell == nil) {
//为cell重新重新获取表格内容的标识符
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
//当分组为0时
if (indexPath.section == 0) {
//在数组中插入与行数数字相同位置的数据
cell.textLabel.text = [listData objectAtIndex:indexPath.row];
}
return cell;
}
//允许表格编辑
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
//删除指定的一行
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
//当方法的编辑样式定义为表格视图的编辑中显示删除行数的样式时
if (editingStyle == UITableViewCellEditingStyleDelete) {
//在数组中删除与行数数字相同的一行
[listData removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
}
}
//对表格上行或下行移动,表格内容位置进行调整
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
//在移动到的位置加入新的一行,内容为所选择的那一行
[listData insertObject:[listData objectAtIndex:fromIndexPath.row] atIndex: toIndexPath.row];
//删除所选行的下一行
[listData removeObjectAtIndex:(NSUInteger)fromIndexPath.row+1];
}
//允许表格内容位置调整的方法,允许用户移动每一行的位置
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
return YES;
}