我跟着this tutorial有委托方法来更新我的其他类中的值,但它甚至没有触发它。你能告诉我我做错了什么吗?
protocol myDelegate {
func report(info:String)
}
class TypeFilterViewController: UIViewController, XLFormRowDescriptorViewController,
UITableViewDataSource, UITableViewDelegate {
var delegate:myDelegate?
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.delegate?.report("testValue")
self.navigationController?.popViewControllerAnimated(true)
}
}
因此,在我选择行项目后,我解除了推送视图并显示上一课程。
class SearchRefinementsTypeCell: XLFormBaseCell, XLFormBaseCellSeparator, myDelegate {
// Delegate method
func report(info: String) {
print("delegate: \(info)")
}
override func update() {
super.update()
let mc = TypeFilterViewController()
mc.delegate = self
self.headerLabel.text = //Value from TypeFilterViewController didSelectRow
}
感谢您提供各种帮助。
答案 0 :(得分:2)
你明显误解了教程。 当您想要从单元格委托给视图控制器时,委托模式很有用。你正在做相反的事情:将一个事件从一个viewController发送到一个单元格,这是没有意义的,因为你的viewController已经可以访问它的tableView,而tableView又用它的单元格进行操作。
此外,您不应该在单元格类中使用任何ViewController
,因为它会破坏MVC模式。您应该将UITableViewCell
和几乎每个UIView
都视为无能为力的对象,这些对象无法自行决定任何事情,但只能将事件委托给其他聪明人,他们自己做逻辑(视图控制器)。
现在谈谈你的情况: 你有vc A和vc B,推过它。当按下B中的一个单元格时,你应该向A发送一个回调,对吧?你应该做什么:
b.delegate = self
再一次,单元格不能知道任何关于任何视图控制器的信息,它们只是典当。应该在视图控制器本身之间处理所有逻辑。