我设置后为什么UITabBarControllerDelegate没有?

时间:2016-01-05 09:39:58

标签: ios swift delegates uitabbarcontroller

我有一个涉及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 的正确实例,以便可以调用其委托方法?

1 个答案:

答案 0 :(得分:4)

这里self.delegate = MainTabBarControllerDelegate()您创建了一个委托,并立即将其分配给delegate属性weak。因此委托被创建但随后被立即处理,因为没有任何东西可以强烈引用它。