Лучший способ справиться с нажатием кнопки XIB, чем прикованные делегаты? - PullRequest
0 голосов
/ 10 июня 2019

Я реализовал некоторый код, включая протоколы, чтобы связать активный экземпляр с VC, чтобы разрешить Segues, и мне интересно, есть ли лучший способ решить эту проблему или я неправильно обращаюсь с Segue.

Сеги в дочерних классах не работают, потому что они не находятся в основном VC

Выдержка из файла VC

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?

Выдержка из файла ячейки

protocol TableViewCellDelegate {
    func didButtonPressed()
}
class TableViewCell: UITableViewCell {

    var delegate: TableViewCellDelegate?
    @IBOutlet weak var labelOne: UILabel!
    @IBOutlet weak var labelTwo: UILabel!
    @IBOutlet weak var buttonOne: UIButton!


    @IBAction func buttonOnePressed(_ sender: Any) {
        delegate?.didButtonPressed()
    }

Это работает так, как я ожидал, но, возможно, с ним сложно работать.

1 Ответ

0 голосов
/ 10 июня 2019

Другой вариант - использовать замыкания вместо делегата.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...