标签栏控制器 - 如何重新选择选定的标签

时间:2013-05-17 02:03:58

标签: ios xcode delegates uitabview

我从默认的选项卡式应用程序开始,在故事板中添加了一些带有自己的视图控制器的选项卡,如何知道已经选中的选项卡何时再次触及?

选项卡1进入已加载其他页面的webview,当用户再次点击主页选项卡时,当它仍然突出显示时,我想重新加载它开始的初始URL。

感谢您的任何想法!

3 个答案:

答案 0 :(得分:0)

每次触摸标签栏时都会调用UITabBarControllerDelegate方法[– tabBarController:didSelectViewController:]。此API的文档说明:

  

在iOS v3.0及更高版本中,此(选定的视图控制器)可能相同   查看已经选中的控制器。

因此,如果您再次选择了指定的标签,则可以让此委托方法重新加载您的初始网址。

答案 1 :(得分:0)

@interface AHTabBarController () <UITabBarControllerDelegate>
@property (nonatomic, strong) UIViewController* previousViewController;
@end

///

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    if ([viewController isEqual:self.previousViewController])
    {
          NSLog(@"reselect tabbar");
    }
    self.previousViewController = viewController;
}

答案 2 :(得分:0)

这是常见用例的完整答案。


  1. 创建一个 protocol 来处理重选

    protocol TabInteractionDelegate {
        func didReselectTab(at index: Int, with item: UITabBarItem)
    }
    
  2. 从自定义 protocol 调用 UITabBarController

    class CustomTabBarController: UITabBarController, UITabBarControllerDelegate {
    
        var tabInteractionDelegate: TabInteractionDelegate?
    
        // ...
    
        override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    
            // This will:
            // 1. Call when the tab is reselected (i.e. The tab does not switch)
            // 2. NOT get called when the tab is switching to a new tab and showing a new view controller
    
            if (tabBar.items?[selectedIndex] == item) {
                 tabInteractionDelegate?.didReselectTab(at: selectedIndex, with: item)
            }
         }
    
    }
    
  3. 在您需要的 UIViewController 中聆听更改

    class CustomViewController: UIViewController, TabInteractionDelegate {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Attach the delegate ?
            if let tabBarCont = tabBarController as? ChoiceTabBarController {
                tabBarCont.tabInteractionDelegate = self
            }
    
        }
    
        // Listen to the change ?
        func didReselectTab(at index: Int, with item: UITabBarItem) {
            print("\(index) :: \(item)")
    
            // Here you can grab your scrollview and scroll to top or something else
        }
    
    }