• 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笔记中拷贝出来了,所以格式请见谅


  • 相关阅读:
    递归函数的写法笔记
    Spring项目中执行Java脚本
    关于秒杀的系统架构优化思路
    分布式搜索引擎Elasticsearch性能优化与配置
    分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)
    分布式搜索引擎Elasticsearch的查询与过滤
    Linux 下编译升级 Python
    搭建通过 ssh 访问的 Git 服务器
    分布式搜索引擎Elasticsearch的简单使用
    PHP 源码学习之线程安全
  • 原文地址:https://www.cnblogs.com/jackljf/p/3589280.html
Copyright © 2020-2023  润新知