改变单元格的索引

时间:2016-07-12 00:08:14

标签: ios swift uitableview

我开始使用UITableViews并且似乎无法找到如何使用代码更改单元格的位置。改变故事板中的位置很简单,但我需要能够迅速完成。

1 个答案:

答案 0 :(得分:0)

<强> TLDR;

  1. 更新您的数据。即swap(&arr[2], &arr[3])
  2. 调用tableView的reloadData()方法以反映对数据的更改。
  3. 答案很长

    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。您还可以在UITableViewUITableViewDataSourceUITableViewDelegate上查看Apple的文档,以获取更多详细信息。

    希望这有帮助!