我有兩個類。一個班級名爲ViewController
,另一個班級名爲TabView
。Swift不能通過委託調用協議方法
我的目標是調用函數changeTab()
,該函數位於ViewController的TabView類中。
不知何故,我有麻煩,因爲每次我的代表是nil
。
這裏是我的視圖控制器代碼:
protocol TabViewProtocol: class {
func changeTab()
}
class ViewController: NSViewController {
// delegate
weak var delegateCustom : TabViewProtocol?
override func viewDidLoad() {
print(delegateCustom) // outputs "nil"
}
buttonClickFunction() {
print(delegateCustom) // outputs "nil"
delegateCustom?.changeTab() // doesn't work
}
}
這裏是我的TabView的代碼:
class TabView: NSTabViewController, TabViewProtocol {
let myVC = ViewController()
override func viewDidLoad() {
super.viewDidLoad()
myVC.delegateCustom = self
}
func changeTab() {
print("test succeed")
}
}
有人可以解釋我什麼,我做錯了什麼? - 我是代表和協議的新成員...
你總是創建一個新的'ViewController'通過'ViewController()' - 新的控制器可能與應用程序的其餘部分無關。你必須在兩個實例之間有一些連接,而不是創建新的實例。一般來說,使用界面構建器應該很容易實現。 – luk2302
更新了我的答案。這是我以前的做法......不能很好地工作 – Anokrize
而且它不是通過interfacebuilder工作,因爲我沒有使用它。 @ luk2302 – Anokrize