您的位置:首页 > 移动开发 > IOS开发

IOS之导航控制器与表视图

2012-09-17 16:40 441 查看
7.1 导航控制器

7.2 创建第一级控制器

7.3 第一个二级控制器

7.4 第一个三级控制器

7.5 第二个二级表控制器

7.6 第三个二级表控制器

7.7 第四个二级表控制器

7.8 第五个二级表视图控制器

7.8 第六个二级表视图控制器

7.1 导航控制器

关于导航控制器和表视图

导航控制器和表视图密不可分。严格的说,要完成导航控制器的功能并不需要表视图。然而,在实际的应用程序中使用导航控制器时,几乎总是要实现至少一个表,并且通常多个表,因为导航控制器的强大之处在于它能够处理复杂的分层数据,在iPhone的小屏幕上,连续的使用表示分层数据最理想的方式。





7.2 创建第一级控制器

一级控制器RootViewController还是一个UITableViewController,它并不是我们说的导航控制器,我们在委托Delegate中定义了导航控制器UINavigationController,事实上UINavigationController才真正意义的根控制器。

RootViewController.h





RootViewController.m





实现TableView数据源方法









cell.accessoryType属性设定表视图单元格扩展图标类型。单元格扩展图标类型:

UITableViewCellAccessoryNone,没有扩展图标;

UITableViewCellAccessoryDisclosureIndicator,扩展指示器,触摸该图标将切换到下一级表视图,图标为



UITableViewCellAccessoryDetailDisclosureButton,细节展示按钮,触摸该行将显示当前行的更多详细信息视图,图标为



UITableViewCellAccessoryCheckmark,选中标志,当选中某一行时候标志该行,图标为



实现TableView委托方法





二级表视图控制器

由于二级控制器也是表视图控制器,而且我们需要在为每个页面指定一个图片,所以我们定义了一个父类SecondLevelViewController

SecondLevelViewController









7.3 第一个二级控制器





DisclosureButtonController.h





DisclosureButtonController.m





实现TableView数据源方法









实现TableView委托方法





上面的委托方法,是用户选中单元格后触发的方法。

[self.navigationController pushViewController:childController animated:YES];

是将详细视图控制器放置到导航控制器栈中,并以动画效果显示详细视图。

RootViewController中 viewDidLoad方法





7.4 第一个三级控制器





DisclosureDetailController.h





message从上一个屏幕传递过来的消息 label显示消息的控件。

m文件中的初始化方法





不要使用viewDidLoad 方法,而是使用viewWillAppear:animated:方法,该方法是在屏幕出现时候调用。

m文件中释放方法





7.5 第二个二级表控制器





CheckListController.h





CheckListController.m





实现TableView数据源方法









实现TableView委托方法





int oldRow = (lastIndexPath != nil) ? [lastIndexPath row] : -1;

获得上次选择的单元格行,如果lastIndexPath为nil这设置为-1

newCell.accessoryType = UITableViewCellAccessoryCheckmark;

设置新单元格为UITableViewCellAccessoryCheckmark oldCell.accessoryType = UITableViewCellAccessoryNone;

设置旧单元格为UITableViewCellAccessoryNone

RootViewController中 viewDidLoad方法





7.6 第三个二级表控制器





RowControlsController.h





RowControlsController.m





实现TableView数据源方法









由于我们没有nib文件,所以按钮要通过代码自己写按钮, 如下:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

指定按钮的边框大小:

button.frame = CGRectMake(0.0f, 0.0f, buttonUpImage.size.width, buttonUpImage.size.height);

设定按钮正常状态时候背景图片

[button setBackgroundImage:buttonUpImage forState:UIControlStateNormal];

设定按钮高亮状态时候背景图片

[button setBackgroundImage:buttonDownImage forState:UIControlStateHighlighted];

button setTitle:@"Tap" forState:UIControlStateNormal 设置按钮正常状态时候的title内容。

[button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];

由于没有nib文件按钮事件不能通过IB设计工具添加,要通过代码实现与按钮事件的处理。

cell.accessoryView = button;

把按钮对象赋给单元格的accessoryView(扩展视图)。





实现TableView委托方法





RowControlsController.m





buttonTapped:方法,是点击单元格中的按钮触发事件。

UITableViewCell *buttonCell = (UITableViewCell *)[senderButton superview];

其中superview获得父控件,即表视图单元格。

NSInteger buttonRow = [[self.tableView indexPathForCell:buttonCell] row];

其中获得选择的单元格中的按钮所在的单元格行数。

RootViewController中 viewDidLoad方法





7.7 第四个二级表控制器





MoveMeController.h





MoveMeController.m





toggleMove方法,是点击导航控制器右边按钮时候触发事件,如果表单元格处于编辑状态时候,设为不可编辑,反之可以编辑单元格。

MoveMeController.m





实现TableView数据源方法

















控制单元格行是否可以移动,本例中我们是可以移动所有行。

实现TableView委托方法





我们希望能够对行重新排序,不过不希望用户能够删除或插入行,因此,我们实现了上面的委托方法,通过这个方法,表视图可以询问指定的行是否可以被删除,或是否可以将新行插入到指定的位置。通过为每一行返回

UITableViewCellEditingStyleNone,表示我们不支持插入或删除任何行。

RootViewController中 viewDidLoad方法





7.8 第五个二级表视图控制器





DeleteMeController.h





DeleteMeController.m





toggleMove方法,是点击导航控制器右边按钮时候触发事件,如果表单元格处于编辑状态时候,设为不可编辑,反之可以编辑单元格。

DeleteMeController.m





实现TableView数据源方法













-(void)tableView:(UITableView *)tableView commitEditingStyle:

(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

该委托方法是实现删除和插入功能。

RootViewController中 viewDidLoad方法





7.9 第六个二级表视图控制器





TeamsViewController.h





TeamsViewController.m





实现TableView数据源方法





实现TableView数据源方法









可编辑表视图控制器





TeamsDetailController.h





TeamsDetailController.m













实现TableView数据源方法













实现TableView委托方法





RootViewController中 viewDidLoad方法





注:

1 本教程是基于关东升老师的教程

2 基于黑苹果10.6.8和xcode4.2

3 本人初学,有什么不对的望指教

4 教程会随着本人学习,持续更新

5 教程是本人从word笔记中拷贝出来了,所以格式请见谅
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: