【问题标题】:shouldSelect method of UITabBarControllerDelegate never invoked从未调用过 UITabBarControllerDelegate 的 shouldSelect 方法
【发布时间】:2018-06-28 04:27:00
【问题描述】:

我正在使用 Swift 4 和 XCode 9。我正在尝试以编程方式控制我的 UITabBarController 中的导航。根据Apple's documentation,我需要实现UITabBarControllerDelegate协议。但是,我实现的方法从未被调用:

import UIKit

class TabBarController: UITabBarController, UITabBarControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()

        tabBarController?.delegate = self
    }

    func tabBarController(_ tabBarController: UITabBarController,
            shouldSelect viewController: UIViewController) -> Bool {
        print("Should go here...")
        return true
    }
}

知道我做错了什么吗?

【问题讨论】:

  • 我怀疑存在一些印刷错误,导致您的方法与要覆盖的委托方法不匹配,但我找不到差异
  • @Alexander 委托中的所有方法都是可选的,因此不需要 override 关键字。问题得到了正确回答,我没有正确初始化控制器。

标签: ios swift uitabbarcontroller


【解决方案1】:

正确的实现方法是 DidSelect.....

【讨论】:

    【解决方案2】:

    要检测项目选择事件,您必须重写 didSelect 方法。

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        print("Should go here...")
    }
    

    【讨论】:

    • 在新的 UIView 显示后调用。 OP 希望调用 shouldSelect 方法,以便在显示新 UIView 之前执行某些操作。
    【解决方案3】:

    您的问题是您设置了错误的委托。将viewDidLoad 更新为:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.delegate = self // or just "delegate = self"
    }
    

    这个想法是你希望这个标签控制器成为它自己的委托。

    【讨论】:

    • 何必为之烦恼。据我所知,他可以从声明中删除 UITabBarControllerDelegate
    • @LeoDabus 如果他想让标签控制器决定是否可以选择给定的标签,则不会。
    • UITabBarController 没有实现 UITabBarControllerDelegate。
    • @AndreaMugnaini 刚刚看到它符合UITabBarDelegate 而不是UITabBarControllerDelegate
    • UIViewController 提供tabBarController 属性是为了方便,因此嵌入在标签栏控制器中的任何视图控制器都可以使用其父标签栏控制器。由于UITabBarController 扩展UIViewController 也具有此属性。事实上,如果你在另一个选项卡控制器中嵌入一个选项卡控制器,子选项卡控制器可以使用其tabBarController 属性来获取父选项卡控制器。在您的情况下,您是 UITabBarController 的子类,并且您想访问 self,而不是任何父选项卡控制器。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 2020-02-26
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多