如果你想了解如何使用表格来显示数据,或是如何删除表格中的一行数据,请点击以下链接:
基于Swift的iOS应用程序开发:使用表格显示并控制数据(一):显示数据
基于Swift的iOS应用程序开发:使用表格显示并控制数据(二):删除表格中的数据
所谓批量处理,其实就是一次选中表格中的多行,然后对这些被选中的数据行做处理
1、允许表格被批量选中
在viewDidLoad()方法中,增加以下代码:
self.tableView.allowsMultipleSelectionDuringEditing = true
此时,如果你希望自己的表格在默认情况下,就能够在每一行的最左侧出现一个复选框,那么还需要加上下面的代码:
self.tableView.setEditing(true, animated: true)
这么做的话,就能满足最基本的表格多选要求了,效果如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN0LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TUkRDZtJGcwhlWspkbaZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TO4ATMyUzM1EDOxcDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
另一种做法是,在界面上添加一个按钮,通过点击这个按钮,使得表格前方出现多选框: 首先需要默认表格一开始不显示每一行的复选框:
self.tableView.setEditing(false, animated: true)
然后我们需要用到UITableViewController的一个自带的属性:self.editButtonItem。这个属性是一个按钮,每当用户按下这个按钮,就会触发表格的编辑事件,整个表格会右移,露出每一行左侧的操作按钮来。我们只需要把这个按钮显示在界面上就可以了。由于我使用的是UINavigationController,所以将这个按钮绑定到顶部导航栏的右侧:
self.navigationItem.rightBarButtonItem = self.editButtonItem
self.navigationItem.rightBarButtonItem?.title = "编辑"
此时,整个viewDidLoad方法是这样的:
override func viewDidLoad() {
super.viewDidLoad()
/*
* 允许表格被多行批量编辑
*/
self.tableView.allowsMultipleSelectionDuringEditing = true
/*
* 设置在界面初始化的时候,表格前方的多选框隐藏或者显示
*/
self.tableView.setEditing(false, animated: true)
self.navigationItem.rightBarButtonItem = self.editButtonItem
self.navigationItem.rightBarButtonItem?.title = "编辑"
}
2、处理被选中的行
重载以下方法,用来处理被选中的行:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("第\(indexPath.row)行被选中了")
}
重载以下方法,用来处理被取消选中的行:
override func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
print("第\(indexPath.row)行被取消选中了")
}
3、思路
由于在上述的步骤中,当表格被选中的时候,只会知道是哪一行被选中,并不会知道其它的东西。而我们在实际的应用开发过程中,经常会需要将被选中的数据进行一些后续处理,例如将被选中的行的id通过webservice传到服务器端等。
而由于我们在现实表格中的数据的时候,一个最简单的方式就是将需要显示的数据事先放在一个数组中( 详见此处),这样能够保证表格中的每一行和数组中的每一个元素都是一一顺序对应的。
因此,我们在处理被选中的行的时候,就简单多了。只需要得到被选中行的行号,然后用这个行号到数组里去获取实际的数据对象即可。