[英]Recursive UITableViewCell button Action
I'm able to generate a UITableView
and a UITableViewCell
however my action is not working properly. 我可以生成UITableView
和UITableViewCell
但是我的操作无法正常工作。 My use case is similiar to this video 我的用例类似于该视频
I was using this question as a reference and was uncesscessful 我以这个问题为参考,没有必要
What am I missing? 我想念什么? Something swift 3 related? 迅捷3相关的东西吗?
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var categories = ["foo", "bar"]
func logAction(sender: UIButton!){
print("HIT BUTTON YO")
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.categories.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:CustomCell = tableView.dequeueReusableCell(withIdentifier: "categories", for: indexPath) as! CustomCell
cell.label.text = categories[indexPath.row]
let button = cell.button
button?.tag = indexPath.row
button?.addTarget(self, action: #selector(self.logAction), for: .touchUpInside)
return(cell)
}
}
class CustomCell: UITableViewCell {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var label: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
//Configure view for selected state
}
}
There is a smarter way to handle a button action in a custom cell. 在自定义单元中有一种更聪明的方式来处理按钮动作。
In the custom cell create a callback closure with no parameter / no return value and an IBAction
connected to the button. 在自定义单元格中,创建一个没有参数/没有返回值且将IBAction
连接到按钮的回调闭包。 In the action call the callback 在动作中调用回调
class CustomCell: UITableViewCell {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var label: UILabel!
var callback : (()->())?
@IBAction func logAction(_ sender : UIButton) {
callback?()
}
}
In cellForRow
assign a closure to the callback, the index path is captured. 在cellForRow
,为回调分配一个闭包,捕获索引路径。
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "categories", for: indexPath) as! CustomCell
cell.label.text = categories[indexPath.row]
cell.callback = {
print("Button pressed", indexPath)
}
return cell
}
Note: return
is not a function (no parentheses). 注意: return
不是函数(不带括号)。
Try accessing the cell's button directly. 尝试直接访问单元格的按钮。 Instead of 代替
let button = cell.button
button?.tag = indexPath.row
button?.addTarget(self, action: #selector(self.logAction), for: .touchUpInside)
Set the properties on the button directly. 直接在按钮上设置属性。
cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(self.logAction), for: .touchUpInside)
是的,所以我只是删除了视图控制器并重新制作,它现在可以工作了__(ツ)_ /
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.