iOS5编程--官方例子代码研究--5.TableMultiSelect

本文档版权归NickTang所有,没有本人书面或电子邮件允许,不许转载,摘录,发表。多谢!


我们在使用tableview的时候,常常会用到删除功能,但是在5.0以前的版本中,我们没有办法一次通过界面删除多行,在iOS5中,这个功能加入近来了。

我们先看一下原先的删除界面的样式


下面是新增加的,可以选择多行的样式。


我们开始分析这个工程的代码。

首先,如果你是下载的2011/10/12的版本的话,工程中会有一个bug,当tableview处于不是编辑状态的时候,你会发现,点中table中的一行,程序没有反映,请打开MainWindow.xib文件。如下图所示:

右键点击MyViewController,在菜单中选择New Referencing Outlet,拉到MyTableViewController上,在弹出的面板上选择viewController.然后保存,编译,这样,你就可以看到在选择一行的时候,有一个新的view出现。

因此,这也是我们从这个例子代码中学到的第一点,

你会发现,MyViewController,EditButton等四个button都是和上面的Window是独立的,不从属于任何View Controller,但是它们又链接到MyTableViewController中的某个变量,这样的话,我们就可以通过xib的方式初始化这些界面相关的东西。你可以试着添加一些其他的元素,这些元素在xib被load近来的时候被初始化。

AppDelegate类没有什么好说的,请参考我原先的分析。

MyTableViewController是我们需要重点分析的:

我们看一下如何使得一个table view支持多行选择,

1.在viewDidLoad函数中:

self.tableView.allowsMultipleSelectionDuringEditing = YES;

这个allowsMultipleSelectionDuringEditing属性缺省是NO;当为NO的时候,就是老式的删除方式。

2.在函数

- (IBAction)editAction:(id)sender

[self.tableViewsetEditing:YESanimated:YES];

上面的这句话,使得table view开始可编辑状态。不论新的方式还是老的方式,都是这句话。

3.函数

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


在取消选择某一行的时候调用。所以在判断tableview如果是在编辑状态的时候,调用

NSArray *selectedRows = [self.tableViewindexPathsForSelectedRows];

来得到所以已选择的行,然后利用这个数组中数据的个数来更新导航栏上右button上的文本。

4.函数

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

在选中某一行的时候调用

首先判断是否table view在编辑状态,如果是,就更新导航栏的右button,如果不是,就导航到下一个view。

5.函数

- (IBAction)addAction:(id)sender

在导航栏右button是一个加号的时候被调用,这个时候,增加一行,并且调用

[self.tableViewscrollToRowAtIndexPath:[NSIndexPathindexPathForRow:(self.dataArray.count - 1) inSection:0]atScrollPosition:UITableViewScrollPositionBottomanimated:YES];


使得table view滚动到最后一行。



最后我增加一下老式的删除方式,

首先我们不能调用

self.tableView.allowsMultipleSelectionDuringEditing = YES;

或者把这个变量设置为NO;

其次增加一个函数如下

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

if (editingStyle ==UITableViewCellEditingStyleDelete) {

        [self.dataArrayremoveObjectAtIndex:[indexPathrow]];

//[myTable reloadData];

        [self.tableViewdeleteRowsAtIndexPaths:[NSArrayarrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade];

}

}

其他的代码就不再解释了,都是很普通的逻辑和函数调用,

注意,这个多选的模式只能在iOS5中使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值