[英]Protocol/delegate in Swift3 doesn't work
我已經按照本教程的要求使用了委托方法來更新另一個類中的值,但是它甚至沒有觸發它。 你能告訴我我做錯了嗎?
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
}
感謝您提供的所有幫助。
您顯然誤解了本教程。 當您要從單元中委派視圖控制器時,委派模式很有用。 您正在做相反的事情:將事件從viewController發送到單元格是沒有意義的,因為viewController已經可以訪問它的tableView,而tableView依次對其單元格進行操作。
另外,您不應該在單元格類中使用任何ViewController
因為它會破壞MVC模式。 您應該將UITableViewCell
和幾乎每個UIView
視為無能為力的對象,它們無法自行決定任何事情,而只能將事件委托給其他聰明的人,這些聰明的人自己執行邏輯(視圖控制器)。
現在,關於您的案例:您擁有vc A和vc B,將其推到上方。 當按下B中的單元格時,您應該向A發送回調,對不對? 您應該做什么:
b.delegate = self
再一次,單元必須對您的任何視圖控制器一無所知,它們只是典當。 所有邏輯都應在視圖控制器之間進行處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.