我已经在tableview单元格上设置了一个按钮,我想知道如何操纵它。也就是说,我有兴趣改变按钮的名称标题,并在点击按钮时添加另一个目标(按钮的不同功能)。我的想法是,这需要被添加到buttonClicked func中,但我不确定如何引用被单击的特定cellForRow。也许可以在cellForRow中使用一个条件来确定按钮标题是什么?我不太确定最好的方法是什么。Swift 3.0 TableView单元格按钮
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
@Pochi我不太清楚什么是出队的意思,它在桌面浏览中起什么作用,以及何时出现单元格出院了,你能解释一下吗?我怎样才能避免这些细胞的重用? – Kevin
你不避免重用单元,这是一个UITableView优化。你需要做的是通过界面生成器创建你自己的UITableViewCell的子类,然后你可以将你的按钮连接到一个属性。当你使用上面的代码时,只需使用“as!”将它转换为你的自定义子类。并直接访问该按钮。既然你现在有一个自定义的子类,你也可以添加一个属性来标识单元格。这个属性也必须在上面的代码中设置(简单地保存当前索引是好的),那么你将能够很容易地知道哪个单元格被按下。 – Pochi