【发布时间】:2017-08-03 02:45:22
【问题描述】:
我在 tableview 单元格上设置了一个按钮,我想知道如何操作它。即,我有兴趣更改按钮的名称标题并在单击按钮时添加另一个目标(按钮的不同功能)。我的想法是这需要添加到 buttonClicked 函数中,但我不确定如何引用被点击的特定 cellForRow。也许可以在 cellForRow 中使用一个条件来确定按钮标题是什么?我不太确定最好的方法是什么。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = guestTableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let button : UIButton = UIButton(type:UIButtonType.custom) as UIButton
button.frame = CGRect(origin: CGPoint(x: 200,y :60), size: CGSize(width: 100, height: 24))
let cellHeight: CGFloat = 44.0
button.center = CGPoint(x: view.bounds.width / (4/3), y: cellHeight / 2.0)
button.setTitleColor(.blue, for: .normal)
button.addTarget(self, action: #selector(buttonClicked), for: UIControlEvents.touchUpInside)
button.setTitle("Add", for: UIControlState.normal)
cell.addSubview(button)
return cell
}
func buttonClicked(sender : UIButton!) {
print("Added!")
}
【问题讨论】:
-
每次单元格出列时,此代码都会在单元格中堆叠 UIButtons。 (由于出队检索到不再使用但不一定是新的,所以它已经存在)
-
@Pochi 我不太确定出队是什么意思以及它在表格视图中扮演什么角色,以及当单元格出队时,你能解释一下吗?如何避免重复使用这些单元格?
-
你不避免重复使用单元格,那是 UITableView 的优化。您要做的是通过界面构建器创建自己的 UITableViewCell 子类,然后您可以将按钮连接到那里的属性。当您使用上面的代码时,只需使用“as!”将其转换为您的自定义子类。并直接访问按钮。由于您现在有一个自定义子类,您还可以添加一个属性来识别单元格。上面的代码也要设置这个属性,(保存当前索引就可以了),那么你就可以很容易地知道哪个单元格被按下了。
-
是的,它会避免 UIButton 堆叠。
-
您的表格视图有一些数据模型(通常是数组)在驱动它;您将跟踪此模型中的当前状态并采取相应措施
标签: ios swift uitableview