IOS之导航控制器与表视图

7.1 导航控制器

7.2 创建第一级控制器

7.3 第一个二级控制器

7.4 第一个三级控制器

7.5 第二个二级表控制器

7.6 第三个二级表控制器

7.7 第四个二级表控制器

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

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

 

 

7.1 导航控制器

关于导航控制器和表视图

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

wps_clip_image-5271

7.2 创建第一级控制器

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

RootViewController.h

wps_clip_image-598

RootViewController.m

wps_clip_image-11529

实现TableView数据源方法

wps_clip_image-9741

wps_clip_image-4311

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

UITableViewCellAccessoryNone,没有扩展图标;

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

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

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

实现TableView委托方法

wps_clip_image-30284

二级表视图控制器

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

SecondLevelViewController

wps_clip_image-21723

wps_clip_image-11528

7.3 第一个二级控制器

wps_clip_image-9186

DisclosureButtonController.h

wps_clip_image-28767

DisclosureButtonController.m

wps_clip_image-10811

实现TableView数据源方法

wps_clip_image-18273

wps_clip_image-21940

实现TableView委托方法

wps_clip_image-26521

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

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

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

RootViewController中 viewDidLoad方法

wps_clip_image-5274

7.4 第一个三级控制器

wps_clip_image-11346

DisclosureDetailController.h

wps_clip_image-29394

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

m文件中的初始化方法

wps_clip_image-1036

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

m文件中释放方法

wps_clip_image-14626

7.5 第二个二级表控制器

wps_clip_image-23234

CheckListController.h

wps_clip_image-431

CheckListController.m

wps_clip_image-15918

实现TableView数据源方法

wps_clip_image-14028

wps_clip_image-15575

实现TableView委托方法

wps_clip_image-11381

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

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

newCell.accessoryType = UITableViewCellAccessoryCheckmark;

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

设置旧单元格为UITableViewCellAccessoryNone

RootViewController中 viewDidLoad方法

wps_clip_image-9230

7.6 第三个二级表控制器

wps_clip_image-18138

RowControlsController.h

wps_clip_image-27357

RowControlsController.m

wps_clip_image-7697

实现TableView数据源方法

wps_clip_image-6510

wps_clip_image-20571

由于我们没有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(扩展视图)。

wps_clip_image-14518

实现TableView委托方法

wps_clip_image-32684

RowControlsController.m

wps_clip_image-29800

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

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

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

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

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

RootViewController中 viewDidLoad方法

wps_clip_image-7248

7.7 第四个二级表控制器

wps_clip_image-10611

MoveMeController.h

wps_clip_image-28135

MoveMeController.m

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

MoveMeController.m

wps_clip_image-5390

实现TableView数据源方法

wps_clip_image-16673

wps_clip_image-21349

wps_clip_image-24782

wps_clip_image-5347

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

实现TableView委托方法

wps_clip_image-10469

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

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

RootViewController中 viewDidLoad方法

wps_clip_image-19595

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

wps_clip_image-12615

DeleteMeController.h

wps_clip_image-2044

DeleteMeController.m

wps_clip_image-22860

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

DeleteMeController.m

wps_clip_image-30851

实现TableView数据源方法

wps_clip_image-26395

wps_clip_image-25990

wps_clip_image-16092

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

(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

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

RootViewController中 viewDidLoad方法

wps_clip_image-23431

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

wps_clip_image-22580

TeamsViewController.h

wps_clip_image-17428

TeamsViewController.m

wps_clip_image-3311

实现TableView数据源方法

wps_clip_image-13916

实现TableView数据源方法

wps_clip_image-29133

wps_clip_image-3393

可编辑表视图控制器

wps_clip_image-12993

TeamsDetailController.h

wps_clip_image-30492

TeamsDetailController.m

wps_clip_image-30249

wps_clip_image-5270

wps_clip_image-9927

实现TableView数据源方法

wps_clip_image-10041

wps_clip_image-17028

wps_clip_image-5550

实现TableView委托方法

wps_clip_image-31810

RootViewController中 viewDidLoad方法

wps_clip_image-31423

 

注:
1 本教程是基于关东升老师的教程
2 基于黑苹果10.6.8和xcode4.2
3 本人初学,有什么不对的望指教
4 教程会随着本人学习,持续更新
5 教程是本人从word笔记中拷贝出来了,所以格式请见谅


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值