2016-02-17 26 views
3

我已经通过界面构建​​器将UITabBar添加到我的应用程序,并成功将选项卡链接到其他视图控制器中的选项卡栏项目,并很好地运行它们之间的应用程序切换。我将如何去检测一个标签被按下?我想在选中时在选定的选项卡视图控制器类中调用一个函数。正如你可能会告诉我,我很新,所以解释非常感谢。当UITabBar项目选择swift时检测到

我无法找到最近的答案,所有答案似乎是非快速或非常旧版本的xcode。

+0

有一个名为didSelectItem的委托方法,当你点击任何标签项时它会被调用。 –

+0

我已经尽可能将UITabBarDelegate添加到包含其中一个选项卡项目的视图控制器的类行,但我不确定下一步是什么? – burg93

+0

你必须在tabbarcontroller中做到这一点。 –

回答

8

你不希望你的视图控制器的基类是一个UITabBarDelegate。如果你这样做,你所有的视图控制器子类将是标签栏代表。我想你想要做的是延长的UITabBarController,这样的事情:

class MyTabBarController: UITabBarController, UITabBarControllerDelegate { 

然后,在这个类,覆盖viewDidLoad中并在那里设置委托财产自我:

self.delegate = self 

注意:这是设置标签栏控制器委托。标签栏有它自己的委托(UITabBarDelegate),标签栏控制器管理它,并且不允许更改。

所以,现在这个类既是UITabBarDelegate(因为的UITabBarController实现该协议),并UITabBarControllerDelegate,你可以重写/根据需要实现这些委托的方法,如:

// UITabBarDelegate 
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { 
    print("Selected item") 
} 

// UITabBarControllerDelegate 
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
    print("Selected view controller") 
} 

我猜你可能对后者更感兴趣。查看文档以查看每个代表提供的内容。

最后,在您的故事板(假设您正在使用故事板)中,将标签栏控制器的类设置为Identity Inspector中的MyTabBarController,并且您很好。

+0

没关系发现它就像放上“item.tag”一样简单。非常感谢您的帮助。 – burg93

+0

很高兴你的工作 – Anokrize

相关问题