自动滚动时(通过拖放操作)单元格文本复制到另一行

时间:2015-10-02 09:59:10

标签: ios xcode swift uitableview swift2

所以这就是事情,我试图在没有框架的情况下工作,因为我想要解开它。 我想做什么用多节和自动滚动功能实现拖放uitableview。 我遇到的问题是,当来回自动滚动时,一些细胞(至少是它们的标签名称)在其他细胞上重复,我真的不明白为什么。

let indexPath = self.tableView.indexPathForRowAtPoint(currentLongPressTouchLocation)
if indexPath != Drag.sourceIndexPath
{
    // swap the data between the 2 (internal) arrays
  let dataPiece = self.items[Drag.sourceIndexPath.section][Drag.sourceIndexPath.row]
    self.items[indexPath!.section].insert(dataPiece, atIndex: indexPath!.row)
    self.items[Drag.sourceIndexPath.section].removeAtIndex(Drag.sourceIndexPath.row)

    //------=-=-=-=[
    // This line errors when it is uncommented. When I comment it out, the error is gone,
    // and the cells /do/ reorder.. ¯\_(ツ)_/¯
    // swap(&currentList.orderItems[indexPath.row], &currentList.orderItems[Drag.sourceIndexPath.row])
    self.tableView.moveRowAtIndexPath(Drag.sourceIndexPath, toIndexPath: indexPath!)
    Drag.sourceIndexPath = indexPath
    // error is definitly here imo but cannot find it :/
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomViewCell

    cell.tag = indexPath.row
    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = screenSize.width
    cell.label.frame = CGRectMake(20, 0, screenWidth - 20, 44)
    cell.textLabel?.text = self.items[indexPath.section][indexPath.row]
    return cell
}

我忘记了自定义视图的初始化我的错误:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let screenWidth = screenSize.width
    label = UILabel(frame: CGRectMake(20, 0, screenWidth / 2, 44))
    labelBis = UILabel(frame: CGRectMake(20, 20, screenWidth - 20, 20))
    labelBis.textAlignment = NSTextAlignment.Center
    self.contentView.addSubview(label)
    self.contentView.addSubview(labelBis)

}

如果有人可以帮助我,我们将非常高兴地感谢您,感谢您的阅读。

1 个答案:

答案 0 :(得分:4)

由于cellForRowAtIndexPath:中的单元格重用,表视图单元格上的数据重复发生。您可能在dequeueReusableCellWithIdentifier内调用cellForRowAtIndexPath:方法,该方法从池中拉出已创建的单元格(通常当单元格1消失且单元格8即将显示时,单元格1将重新用于单元格8而不是创建一个新单元格。

如果发生这种情况,我们有责任在设置新内容之前重置重复使用的单元格内容。有时,您的单元格标签设置代码可能处于If条件中,而该条件未在当前上下文中执行,从而导致显示重复使用的单元格的标签文本。

请检查,我相信你的情况会落在这里。