Swift:如何在UITabBarItem被按下时执行一个动作
目前我有一个连接到桌面视图控制器的选项卡栏控制器。 我正在试图去当我按下标签栏项目的桌面视图的顶部。 我知道如何到达桌面的顶部。 我只是不知道如何做一个动作,当项目被按下。
你应该使用方法didSelectItem
使用UITabBarDelegate
。 使用它作为任何标准的代表:
class yourclass: UIViewController, UITabBarDelegate { func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) { //This method will be called when user changes tab. } }
而且不要忘了在视图控制器中设置你的标签栏代表self
。
这是对这个问题的答案
基本上你这样做:
- 确保你的视图控制器订阅了UITabBarDelegate
- 在IB中为每个标签栏项目设置标签
-
实现didSelectItem方法,如下所示:
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { if(item.tag == 1) { //your code for tab item 1 } else if(item.tag == 2) { //your code for tab item 2 } }
这会让你访问每个标签项目点击事件。 希望能帮助到你!
SWIFT 3
class yourclass: UIViewController, UITabBarDelegate { func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { print("Test") } }
不要忘记在viewDidLoad中设置你的tabBar委托
override func viewDidLoad(){ super.viewDidLoad() <YOUR TAB BAR NAME>.delegate = self }
我在这里执行其他答案时遇到了麻烦。 这是一个更完整的答案。 它假定您正在使用UITabBarController
(默认情况下,如果您创build一个新的选项卡式应用程序)。 每次点击视图控制器选项卡button时,此解决scheme将打印一条消息。
码
创build一个名为MyTabBarController.swift的新Swift文件。 粘贴下面的代码。
import UIKit class MyTabBarController: UITabBarController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() // tell our UITabBarController subclass to handle its own delegate methods self.delegate = self } // called whenever a tab button is tapped func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { if viewController is FirstViewController { print("First tab") } else if viewController is SecondViewController { print("Second tab") } } }
界面生成器
在故事板上select标签栏控制器。 然后在身份检查器中,将类名设置为MyTabBarController
(即上面代码中类的名称)。
就这样。 您现在可以运行您的应用程序,并在用户点击标签栏项目时收到通知。
笔记
-
如果你需要在水龙头上运行一个方法,那么你可以在
didSelect
方法中做如下的事情。if let firstVC = viewController as? FirstViewController { firstVC.doSomeAction() }
-
你可以做
FirstViewController
实现委托并处理所有的事情。 这样你就不需要做任何自定义的UITabBarController
子类,并在IB中设置它。 但是,生孩子,父母的工作似乎是错误的地方。 无论如何,这里是:class FirstViewController: UIViewController, UITabBarControllerDelegate { override func viewDidLoad() { super.viewDidLoad() tabBarController?.delegate = self } func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { // ... } }
上面的
didSelect
方法被调用,不pipe哪个标签被点击。 -
UITabBarControllerDelegate
文档
另一种解决scheme是在viewDidAppear
中selectView Controller中的任何一个。
第一个标签视图控制器
import UIKit class FirstViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("First tab") } }
第二个标签视图控制器
import UIKit class SecondViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print("Second tab") } }