首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

【一步一步学IOS5 】 处置UITableView中的行选择

2012-09-27 
【一步一步学IOS5 】 处理UITableView中的行选择下面,我们将尝试对先前的demo做如下变化:?(1)当用户点击一行

【一步一步学IOS5 】 处理UITableView中的行选择

下面,我们将尝试对先前的demo做如下变化:

?

(1)当用户点击一行时,显示一个提醒消息

?

(2)当用户选择了一行时,显示一个选中的标志

?

1.理解UITableViewDelegate

?

在我们创建Simple Table View 应用程序时,我们在SimpleTableController.h 中定义了2个委托(UITableViewDelegate 和 UITableViewDataSource):

?

#import<UIKit/UIKit.h>

?

@interface SimpleTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

?

@end

?

2个委托在Object-C 中称为协议(protocol). 当创建了UITableView,你必须遵守这些协议中定义的要求。

?

在IOS编程中,遇到不同的委托是非常常见的。每一个委托负责特定的角色或任务,保持系统的简洁。任何时候在一个对象需要完成特定任务时,它依赖于另外一个对象去负责处理。这个在系统设计领域通常称为关注点分离(Separation of Concern).

?

当你分析UITableView 类时,它也应用了这一设计概念。这2个委托迎合了不同的目标。我们实现的UITableViewDataSource 委托定义了方法,用来显示表数据;另一方面,UITableViewDelegate 委托则负责处理 UITableView界面和行选择。

?

显然,我们将使用UITableViewDelegate委托,来实现处理行选择的方法。

?

2.处理表视图行选择(Table Row Selection)

?

在更改代码之前,我们需要知道:

?

我们怎么知道UITableViewDelegate中的哪一个方法需要实现?

?

你需要参考Apple的iOS programming reference 文档,有2种方法可以访问该文档。你可以选择Apple网站的API文档,或者直接在Xcode 中查询。

?

如果读完文档,你将发现如下方法用来管理行选择:

?

- tableView:willSelectRowAtIndexPath:

- tableView:didSelectRowAtIndexPath:

?

2个方法都用于行选择。唯一的区别是:在行将要选择的时候,调用willSelectRowAtIndexPath方法。通常,你可以使用这个方法来阻止选定特定的行。一般情况下,你使用didSelectRowAtIndexPath 方法,在用户选择一行时,调用这个方法去负责行选择。在这个方法里面,添加代码来指定具体业务行为,在行选择的时候调用。

?

在本例子中,我们将添加一些动作来处理行选择:

?

1)显示警告消息

2)显示一个勾选标志,表示改行已经选择

?

3.coding start!

?

现在我们解释足够清楚了,接下来开始进入有趣的部分 - code, code, code !

?

在Xcode 中,打开 SimpleTableViewController.m?文件, 在@end 指令之前添加如下方法:

?

?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

? ? UIAlertView *messageAlert = [[UIAlertView alloc] initWithTitle:@"行选择" message:@"你已经选择一行!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

? ? [messageAlert show];

}

?

代码非常容易理解。在选择一行时,App 创建一个 UIAlertView 对象,并弹出一个警告消息。再次运行App,当你轻拍一行时,App显示如下图所示:

?


【一步一步学IOS5 】 处置UITableView中的行选择

?

下面是改进之后的中文菜单显示效果图:

?


【一步一步学IOS5 】 处置UITableView中的行选择

?

?

我们修改代码入下

?

?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

? ? NSString *message = [tableData objectAtIndex:indexPath.row];

? ? UIAlertView *messageAlert = [[UIAlertView alloc] initWithTitle:@"行选择" message:message delegate:nil cancelButtonTitle:@"确定" otherButtonTitles: nil];

? ? [messageAlert show];

}



这样填出框就会显示菜谱的名字了

【一步一步学IOS5 】 处置UITableView中的行选择
?
接着,我们将添加一些代码,显示所选择行的标志。在开始之前,让我们看看一个表格单元格默认内容:

【一步一步学IOS5 】 处置UITableView中的行选择
?一个单元格分为3部分:
图像(缩略图) - 左侧部分保留显示缩略图,就像我们之前在Simple Table 应用程序中实现的一样
内容 - 主要部分用来显示文本标签和相信内容
附件视图 (Accessory View) - 右侧部分保留为附件视图。 有3类默认的附件视图,包括 Disclosure 标示符、Detail Disclosure 标示符和Check Mark(选中标示),下图显示了这些标示符的效果:

【一步一步学IOS5 】 处置UITableView中的行选择
?在行选择之后,为了显示选中标志,仅需要在[messageAlert show] 代码之后,添加如下2行代码:

? ??UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

? ? cell.accessoryType = UITableViewCellAccessoryCheckmark;

?

第一行通过使用indexPath获得选中表的单元格,

第二行更新选中单元格的附件视图为选中标志(Check Mark)

?

编译运行App,在你轻拍一行后,将显示一个选择标志(Check Mark)

?


【一步一步学IOS5 】 处置UITableView中的行选择

现在,当你选择一行时,将以蓝色突出显示改行,如果你不喜欢,可以添加如下代码取消这一效果:

?

[tableView deselectRowAtIndexPath:indexPath animated:YES];



【一步一步学IOS5 】 处置UITableView中的行选择
??


?

热点排行