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

系统 1720 0

下面,我们将尝试对先前的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中的行选择
 
 


 

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论