所以这就是事情,我试图在没有框架的情况下工作,因为我想要解开它。 我想做什么用多节和自动滚动功能实现拖放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(¤tList.orderItems[indexPath.row], ¤tList.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)
}
如果有人可以帮助我,我们将非常高兴地感谢您,感谢您的阅读。
答案 0 :(得分:4)
由于cellForRowAtIndexPath:
中的单元格重用,表视图单元格上的数据重复发生。您可能在dequeueReusableCellWithIdentifier
内调用cellForRowAtIndexPath:
方法,该方法从池中拉出已创建的单元格(通常当单元格1消失且单元格8即将显示时,单元格1将重新用于单元格8而不是创建一个新单元格。
如果发生这种情况,我们有责任在设置新内容之前重置重复使用的单元格内容。有时,您的单元格标签设置代码可能处于If条件中,而该条件未在当前上下文中执行,从而导致显示重复使用的单元格的标签文本。
请检查,我相信你的情况会落在这里。