我已经实现了一些代码,其中包括将活动实例链接到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?
此功能以我期望的方式运行,但似乎可能使人困惑。
答案 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)