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


  • 相关阅读:
    HDU 5818 Joint Stacks
    HDU 5816 Hearthstone
    HDU 5812 Distance
    HDU 5807 Keep In Touch
    HDU 5798 Stabilization
    HDU 5543 Pick The Sticks
    Light OJ 1393 Crazy Calendar (尼姆博弈)
    NEFU 2016省赛演练一 I题 (模拟题)
    NEFU 2016省赛演练一 F题 (高精度加法)
    NEFU 2016省赛演练一 B题(递推)
  • 原文地址:https://www.cnblogs.com/jackljf/p/3589280.html
Copyright © 2020-2023  润新知