与链接代表相比,处理xib按钮按下的更好方法?

时间:2019-06-10 06:51:53

标签: ios swift

我已经实现了一些代码,其中包括将活动实例链接到VC以允许Segues的协议的协议,我想知道是否有更好的方法来解决此问题,或者我是否以错误的方式处理了Segue。

子类中的主题不起作用,因为它们不在主VC中

摘录自VC文件

FormRequest
class ViewController: UIViewController, UITableViewDelegate, TableViewControllerDelegate  {


    func didButtonPressed() {
        performSegue(withIdentifier: "destStory", sender: self)
    }



    override func viewDidLoad() {
        super.viewDidLoad()


        tableViewController.delegate = self
    }




}

单元格文件摘录

protocol TableViewControllerDelegate {
    func didButtonPressed()
}

class TableViewController: UITableViewController, TableViewCellDelegate {
    func didButtonPressed() {
        delegate?.didButtonPressed()
    }

    let test = ["test1", "test2", "test3"]
    var instanceOf = self
    var delegate: TableViewControllerDelegate?

此功能以我期望的方式运行,但似乎可能使人困惑。

1 个答案:

答案 0 :(得分:0)

另一个选择是使用 closures 代替委托。

class TableViewCell: UITableViewCell {

    var buttonPressedClosure: (() -> Void))?
    @IBOutlet weak var labelOne: UILabel!
    @IBOutlet weak var labelTwo: UILabel!
    @IBOutlet weak var buttonOne: UIButton!


    @IBAction func buttonOnePressed(_ sender: Any) {
        buttonPressedClosure?()
    }
}

此外,您可以直接在 cellForRow UITableViewDelegate 函数中为单元格的按钮添加目标动作,但是我认为这是一种肮脏的方式。

let cell = ...
cell.button.addTarget(self, action: #selector(didButtonPressed), for: .touchUpInside)