我开始使用UITableViews并且似乎无法找到如何使用代码更改单元格的位置。改变故事板中的位置很简单,但我需要能够迅速完成。
答案 0 :(得分:0)
<强> TLDR; 强>
swap(&arr[2], &arr[3])
。reloadData()
方法以反映对数据的更改。答案很长
UITableView
的实例通过检查其数据源(UITableViewDataSource
)来获取所需的信息。这包括节和行的数量,以及表视图要使用的UITableViewCell
的实例。这些由以下UITableViewDataSource
委托方法定义:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int;
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int;
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell;
通常,您可以将前两个基于您拥有的某些数据,可能是数组或类似的容器。例如,如果tableView显示来自名为fruitArray
的数组的数据(其中包含不同水果的名称 - 字符串列表),那么您可能会遇到以下内容:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// Our array is one dimensional, so only need one section.
// If you have an array of arrays for example, you could set this using the number of elements of your child arrays
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Number of fruits in our array
return fruitArray.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("yourCellId") // Set this in Interface Builder
cell.textLabel?.text = fruitArray[indexPath.row]
return cell
}
然后,您可以看到问题的答案变得简单!由于给定单元格的内容基于fruitArray
,您需要做的就是更新数组。但是如何让tableView“重新检查”其dataSource?好吧,你使用reloadData
方法,如下所示:
swap(&fruitArray[2], &fruitArray[3])
tableView.reloadData()
然后触发tableView“重新检查”其dataSource,从而导致数据交换出现在屏幕上!
如果您希望用户能够交换单元格的位置,您可以使用以下 UITableViewDelegate (非UITableViewDataSource
)委托方法:
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool
有关详细信息,请查看this article。您还可以在UITableView,UITableViewDataSource和UITableViewDelegate上查看Apple的文档,以获取更多详细信息。
希望这有帮助!