繁体   English   中英

递归UITableViewCell按钮操作

[英]Recursive UITableViewCell button Action

我可以生成UITableViewUITableViewCell但是我的操作无法正常工作。 我的用例类似于该视频

我以这个问题为参考,没有必要

我想念什么? 迅捷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
    } 
}

在自定义单元中有一种更聪明的方式来处理按钮动作。

在自定义单元格中,创建一个没有参数/没有返回值且将IBAction连接到按钮的回调闭包。 在动作中调用回调

class CustomCell: UITableViewCell {

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var label: UILabel!

    var callback : (()->())?

    @IBAction func logAction(_ sender : UIButton) {
        callback?()
    }
}

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
}

注意: return不是函数(不带括号)。

尝试直接访问单元格的按钮。 代替

let button = cell.button
button?.tag = indexPath.row
button?.addTarget(self, action: #selector(self.logAction), for: .touchUpInside)

直接在按钮上设置属性。

cell.button.tag = indexPath.row
cell.button.addTarget(self, action: #selector(self.logAction), for: .touchUpInside)

是的,所以我只是删除了视图控制器并重新制作,它现在可以工作了__(ツ)_ /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM