Ios 在UITabBarController中检测选项卡上的点击
我已经创建了一个tabBarController,如下所示Ios 在UITabBarController中检测选项卡上的点击,ios,swift,uitabbarcontroller,uitabbar,Ios,Swift,Uitabbarcontroller,Uitabbar,我已经创建了一个tabBarController,如下所示 let tabbarController = UITabBarController() let homeViewController = HomeViewController() let rewardsViewController = RewardsViewController() let moreViewController = NewMoreViewController() let homeNVc
let tabbarController = UITabBarController()
let homeViewController = HomeViewController()
let rewardsViewController = RewardsViewController()
let moreViewController = NewMoreViewController()
let homeNVc = UINavigationController()
homeNVc.viewControllers = [homeViewController]
let rewardsNVc = UINavigationController()
rewardsNVc.viewControllers = [rewardsViewController]
let moreNVc = UINavigationController()
moreNVc.viewControllers = [moreViewController]
tabbarController.viewControllers = [homeNVc, rewardsNVc, moreNVc]
tabbarController.tabBar.items![0].title = NSLocalizedString("Dashboard", comment: "")
tabbarController.tabBar.items![1].title = NSLocalizedString("Prämien", comment: "")
tabbarController.tabBar.items![2].title = NSLocalizedString("Mehr", comment: "")
self.window?.rootViewController = tabbarController
}
一切正常。我可以完美地移动选项卡,现在我的homeViewController中有了ta tableView。当用户点击TabBarController的第一个选项卡时,我想重新加载它。即使用户已经在该viewController上,我也要重新加载tableView
所以基本上我怎么能检测到用户点击了第一个ViewController
请指导我,谢谢:-)调用UITabBarControllerDelegate并实现此方法
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController){
}
在您的homeViewController中,您可能需要实现此委托方法:
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
//ask where it is first tab bar item
if self.tabBarController?.selectedIndex == 0 {
// your action, e.g.:
self.tableView.reloadData()
}
}
注意:
您需要像这样维护您的类:
a)
class YourTabBarController: UITabBarController { // inherit from UITabBarController
class YourViewController: UIViewController, UITabBarDelegate { // set protocol
或者这个:
b)
class YourTabBarController: UITabBarController { // inherit from UITabBarController
class YourViewController: UIViewController, UITabBarDelegate { // set protocol
只需实现以下委托方法
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
if item.title == "first tab name"{
//Do your thing
}
我最近也写过类似的东西。为了保持一致性,我为我使用的每个选项卡创建了一个基类BaseTabBarViewController。但要考虑到,如果选项卡是导航控制器,则从BaseTabBarViewController继承的是根视图控制器。 该基类实现UITABBARCONTROLLEDELEGATE协议。在viewDidLoad中,我们将其标记为委托。 在委托方法中(Objective-c,与swift 3非常相似):
要访问点击的tabBarItem,请在UITabBarController的自定义类中重写以下函数 Swift:
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let index = tabBar.items?.index(of: item) else { return }
// Do something with the index
}
如何检测哪个选项卡被点击?每个选项卡都附带一个viewcontroller。在你的问题中,你写了“那么基本上,我怎样才能检测到用户点击了第一个ViewController?”所以在这个方法中,你将得到ViewController。您可以检查viewController或其标识符、标题等。我已经实现了此方法,但没有调用它。但是didSelectViewController正在被调用。根据标题测试它是不安全的。这不是正确的约定。我为Swift 3编写了此代码,因此如果您复制粘贴,您可能需要更正某些语句self.tabbar controller?.selectedIndex是我的关键点。没有调用didSelectItem,因此我使用了didSelectViewController。可以吗?如果(tabBarController.selectedIndex==0),则将其更改为
。没有像这样的属性。已选择