我跟着this tutorial有委託方法更新其他類中的值,但它甚至沒有觸發它。你能告訴我我做錯了什麼嗎?Swift3中的協議/代理不起作用
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
}
謝謝你的所有幫助。
爲什麼你需要從控制器委派給單元,而不是相反?每次調用update()函數時,您都會在單元類中創建一個新的控制器對象,並且從不使用該對象,它只是在函數完成時纔會釋放。 – alexburtnik
我正在使用Xlform庫,因此SearchRefinementsTypeCell是我在主不在TypeFilterViewController中查看,並且TypeFilterViewController具有hiw擁有另一個單元格。這兩個實際上並不相關。但不知何故,我需要在用戶選擇TypeFilterViewController下的單元格並觸發didSelectRow後更新此SearchRefinementsTypeCell中的標籤。我希望我能解釋它。 – Umitk
@alexburtnik很好的答案我完全同意。協議應該是自定義單元類的一部分,並且視圖控制器應符合協議。你需要翻轉東西。 – user3353890