我在storyboard中创建了一个tableview原型单元格,我在单元格中添加了一个按钮,并将其标记设置为indexpath.row。当我滚动单元格时,tableview顶部的滚动单元格始终将标记设置为零而不是正确的标记。
public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("autoLoadReuseIndentifier", forIndexPath: indexPath)
print("indexpath :\(indexPath.row)")
cell.contentView.viewWithTag(100)?.layer.cornerRadius = 5
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
let tempDict : NSDictionary = savedCardsArray.objectAtIndex(indexPath.row) as! NSDictionary
let bankName = cell.contentView.viewWithTag(102) as! UILabel
deleteButton = cell.contentView.viewWithTag(106) as? UIButton
deleteButton?.tag = indexPath.row
deleteButton?.addTarget(self, action: "deleteCard1:", forControlEvents: UIControlEvents.TouchUpInside)
print("delete button:\(deleteButton)")
// print("indexpath delete tag :\(deleteButton.tag)")
if(self.isSetUpAutoloadSelected){
deleteButton?.hidden = true
}else{
deleteButton?.hidden = false
}
return cell;
}
每当我滚动单元格时,删除按钮标记始终设置为零。
答案 0 :(得分:1)
如果您应该采用其他方式,请使用follow代码并获取indexPath。
func deleteCard1(_ sender:deleteCard) {
let buttonPosition:CGPoint = sender.convert(CGPointZero, to:self.tableView)
let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
}
答案 1 :(得分:0)
我认为您不需要遵循这种方法,因为首先您在故事板中静态设置按钮标记,然后再次更改它在cellforrowatindexpath中的标记,因此当您滚动时,单元格将永远不会找到带有标记106的按钮。如果你想要遵循这种方法,那么你需要创建customButton并添加类型为NSInteger的变量或任何你想要的变量,并将indexpath.row存储到customButton的变量中。
另一种方法是创建CustomTableViewCell类并在此自定义Cell类中创建按钮插座,并将indexpath.row设置为按钮标记,如下所示
CustomCellClassObject.buttonName.tag = indexPath.row
答案 2 :(得分:0)
正如Sumit所说,最好使用自定义单元格并为按钮和标签创建插座,因为使用标签获取子视图将很难维护代码。
此外,您不必创建变量deleteButton,因为我没有看到有效的目的。
将标签分配给按钮并在cellForRowAtIndexPath中添加目标,它应该可以正常工作。