Ios 从未调用UITabBarControllerDelegate的shouldSelect方法
我使用的是Swift 4和XCode 9。我正试图以编程方式控制UITabBarController中的导航。根据,我需要实现Ios 从未调用UITabBarControllerDelegate的shouldSelect方法,ios,swift,uitabbarcontroller,Ios,Swift,Uitabbarcontroller,我使用的是Swift 4和XCode 9。我正试图以编程方式控制UITabBarController中的导航。根据,我需要实现UITabBarControllerDelegate协议。但是,我实现的方法从未被调用: import UIKit class TabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDid
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
}
}
知道我做错了什么吗?您的问题是设置了错误的代理。将
viewDidLoad
更新为:
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self // or just "delegate = self"
}
您希望此选项卡控制器成为自己的代理。您的问题是设置了错误的代理。将
viewDidLoad
更新为:
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self // or just "delegate = self"
}
其想法是希望此选项卡控制器成为其自己的代理。要检测所选项目事件,必须覆盖didSelect方法
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Should go here...")
}
要检测所选项目事件,必须覆盖didSelect方法
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Should go here...")
}
正确的实现方法是DidSelect…正确的实现方法是DidSelect…我怀疑有一些印刷错误,使您的方法与它要重写的委托方法不匹配,但我找不到difference@Alexander委托中的所有方法都是可选的,因此不需要
覆盖关键字。问题回答正确,我没有正确初始化控制器。我怀疑有一些印刷错误,使您的方法与它要重写的委托方法不匹配,但我找不到difference@Alexander委托中的所有方法都是可选的,因此不需要override
关键字。问题回答正确,我没有正确初始化控制器。为什么要这么麻烦呢。据我所知,他只需将UITabBarControllerDelegate从declaration@LeoDabus如果他希望选项卡控制器指示是否可以选择给定的选项卡,则不会执行此操作。UITabBarController
没有实现UITabBarControllerDelegate
@anderamugnani刚刚看到它符合uitabbarelegate
notUITabBarControllerDelegate
UIViewController
为方便起见提供了tabBarController
属性,以便嵌入在选项卡栏控制器中的任何视图控制器都可以访问其父选项卡栏控制器。由于uitabarcontroller
扩展UIViewController
也具有此属性。事实上,如果在另一个选项卡控制器中嵌入选项卡控制器,则子选项卡控制器可以使用其tabBarController
属性来获取父选项卡控制器。在您的情况下,您正在子类化uitabarcontroller
,并且您希望访问self
,而不是任何父选项卡控制器。为什么要这么麻烦呢。据我所知,他只需将UITabBarControllerDelegate从declaration@LeoDabus如果他希望选项卡控制器指示是否可以选择给定的选项卡,则不会执行此操作。UITabBarController
没有实现UITabBarControllerDelegate
@anderamugnani刚刚看到它符合uitabbarelegate
notUITabBarControllerDelegate
UIViewController
为方便起见提供了tabBarController
属性,以便嵌入在选项卡栏控制器中的任何视图控制器都可以访问其父选项卡栏控制器。由于uitabarcontroller
扩展UIViewController
也具有此属性。事实上,如果在另一个选项卡控制器中嵌入选项卡控制器,则子选项卡控制器可以使用其tabBarController
属性来获取父选项卡控制器。在您的情况下,您正在子类化uitabarcontroller
,并且您希望访问self
,而不是任何父选项卡控制器。这在显示新的UIView后调用。OP希望调用shouldSelect方法,以便他可以在显示新UIView之前执行某些操作。这是在显示新UIView之后调用的。OP希望调用shouldSelect方法,以便在显示新UIView之前可以执行某些操作。解释为什么它是“正确的方法”。解释为什么它是“正确的方法”。