IOS编程教程(六)如何在UITableView处理行选择

如果你跟着学习iOS编程的教程,我相信你应该创建一个有自定义的表格单元格简单的表视的应用程序。到目前为止,我们专注于表视图中的数据显示。但是,在有人在表上点击时我们就不知道干什么了。这是我们将在这篇文章告诉你的,关于如何处理行选择。

首先,让我们回顾一下我们的应用程序看看我们将添加的东西。

Simple Table App - Row Selection

有一些变化把,我们在本教程中实现的内容有:

·         当用户点击一行, 显示一条警告消息,

·         当用户选择某一行,显示一个复选标记

了解UITableViewDelegate

当您第一次建立了简单的表视图应用程序,你在SimpleTableController.h声明了两个的委托(UITableViewDelegateUITableViewDataSource),

1
2
3
4
5
#import <UIKit/UIKit.h>

@interface SimpleTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@end

正如在前面的教程解释的哪有,这两个委托是Objective-C的协议。你必须遵守这些协议中所规定的某些要求来建立一个UITableView

iOS编程遇到各种委托是很常见的。每个委托负责一个特定的角色或任务,以保持系统的简单和干净。当一个对象需要执行特定的任务,它依赖于另一个对象来处理。这通常被称为系统设计关注点分离

当你在看到UITableView类时,它也适用于这样的设计理念。两位委托为不同的目的提供需求。我们刚刚实现的UITableViewDataSource委托,定义了用于显示表中的数据的方法。而UITableViewDelegate定义了UITableView的外观,以及处理的行选择。

很明显,我们将利用的UITableViewDelegate并实现所需的方法来处理行选择。

处理表行选择

在我们更改代码之前,你可能会问:

我们怎么知道在UITableViewDelegate的哪些方法需要实现吗?

您可以随时参阅苹果公司的iOS编程参考。有两种方法可以访问该文档。您可以访问苹果公司的网站上API文档。或者干脆看看它在Xcode里面的提示。例如,你想看UITableViewDelegateAPI文档,只需将光标移到类名上,然后按“control-command-?。你会看到以下的弹出窗口:

xcode api doc shortcut

快捷键来执行API文档

点击API文档中UITableViewDelegate协议参考:

UITableViewDelegate Protocol Reference

UITableViewDelegate协议参考

如果你阅读整个文档,你会发现这些方法,可以用来管理行选择:

– tableView:willSelectRowAtIndexPath:
– tableView:didSelectRowAtIndexPath:

两种方法都可用于行选择。当一行即将被选中时触发“willSelectRowAtIndexPath”。一般利用此方法,以防止一个特定行被选择生。通常情况下,您可以使用“didSelectRowAtIndexPath”的方法,这是在用户选择某一行后调用来处理行选择,并执行用户添加的代码。在本教程中,我们将添加一些行为来处理行选择:

·         显示警报消息

·         显示一个复选标记,以指示行被选中

让我们开始代码编写把

好了,解释足够了,让我们进入到了有趣的部分 – 敲代码,代码,码!

在Xcode中,打开“SimpleTableViewController.m”,在 “@end” 前添加下面的方法。

1
2
3
4
5
6
7
8
9
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIAlertView *messageAlert = [[UIAlertView alloc]
                                    initWithTitle:@"Row Selected" message:@"You've selected a row" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    
    // Display Alert Message
    [messageAlert show];
    
}

这些代码是很容易理解的。当行被选中时,应用程序创建一个UIAlertView,并显示一条警告消息。尝试运行应用程序,当你点击一行时应用程序会是这样:

SimpleTableApp Row Selected

当行被选中,显示警报消息

你的练习

现在,当我们点击一行时,选择的是一个通用消息。如果显示下面那样会更好,对吧:

SimpleTableApp Row Selected Recipe

想想你应该怎么改变代码 (hint: the indexPath parameter contains the row number of the selected row) and display the message like the screenshot shown above. It’s not difficult to do so if you’ve followed the previous tutorial.

Easy, right? With the use of delegate, it’s very straightforward to detect row selection. Next, we’ll add a few lines of code to display a tick for the selected item. Before that, let me take a look at the default content of a table cell:

UITableViewCell Structure

UITableViewCell的默认构造

表单元格可以分为三个部分:

·         缩略图- 左边部分是保留给显示缩略图,就像我们在简单的表应用教程做了的那样,

·         内容 中间主要部分用于显示文本标签和详细的文字

·         附件视图 - 右边部分是保留的辅助视图。有三种默认附件类型,包括披disclosure indicatordetail disclosure button详细披露按钮)和check mark(复选标记)。下面的图显示了这些类型的样子。

    TableCell Accessory View

    UITableViewCell 附件视图

    要显示一个复选标记表示是否选​​择了该行,你只需要在““[messageAlert show]”后添加两行代码:

    1
    2
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    第一行代码通过indexPath来检索选定的表单元格。第二行代码说明选中的单元格有复选标记。

    编译并运行应用程序。当你点击一行数据后,它显示一个复选标记。

    SimpleTableApp Check Mark

    现在,当你选择一行,该行将会高亮蓝色显示。如果你不喜欢它,尝试添加以下代码来取消选择该行的效果。

    1
    [tableView deselectRowAtIndexPath:indexPath animated:YES];


    即将推出的下一个教程是什么?

    我希望你们已经学会了很多东西!到现在为止,你对如何创建表视图应该有一个更好的了解,自定义表格单元格和处理表行选择。请确保您了解的信息教程中,UITableView是一种常见的UI元素在iOS。如果您有任何疑问,请前往我们的论坛与我们分享。

    对于iOS编程,学习的东西还有很多。在未来的教程中,我们将看到如何用文件或者数据库取代食谱数组,以及用故事板来建立一个更复杂的应用程序。

    posted @ 2012-11-10 21:13  但,我知道  阅读(4039)  评论(2编辑  收藏  举报