我有一个涉及UITabBarControllerDelegate
的奇怪问题。
我使用以下代码:
import UIKit
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = MainTabBarControllerDelegate()
print("did set delegate to \(self.delegate)")
}
}
class MainTabBarControllerDelegate: NSObject, UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
print("selected: \(viewController) --> index: \(tabBarController.selectedIndex)")
}
}
然后,在我的故事板中,我将香草UITabBarController
与两个普通UIViewControllers
连接起来。我只是想抓住标签更改事件,但由于某些原因,我delegate
的{{1}}没有正确设置。
当我使用上面的代码运行项目时,控制台输出:
MainTabBarController
为什么不创建did set delegate to nil
的正确实例,以便可以调用其委托方法?
答案 0 :(得分:4)
这里self.delegate = MainTabBarControllerDelegate()
您创建了一个委托,并立即将其分配给delegate
属性weak
。因此委托被创建但随后被立即处理,因为没有任何东西可以强烈引用它。