【问题标题】:getting current active viewController in UITabBarControllerDelegate在 UITabBarControllerDelegate 中获取当前活动的 viewController
【发布时间】:2020-06-27 09:31:24
【问题描述】:

我想在我的UITabBarController 中的所有viewControllers 上实现一个scrollToTop 方法。以下是UITabBarControllerDelegate 中的一个方法和触发器,当我选择一个选项卡时。 问题是,当viewController 处于活动状态时,我只想滚动到viewController 的顶部。这样用户可以在不丢失滚动位置的情况下切换选项卡,但是当他触摸当前活动选项卡的tabBar中的选项卡时,它应该滚动到顶部。

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    if viewControllerThatIsCurrentlyActiveInTabBar == viewController {
        scrollToTop()
    }
}

基本上,我需要上面 if 语句的那个​​条件。 我试过:viewController.isViewLoadedtabBarController.selectedViewController == viewControllerviewController.isBeingPresented。这些条件都不起作用。它要么不会触发scrollToTop(),要么会一直触发,这样您在更改选项卡时就会失去滚动位置,因为它会立即滚动到顶部。

【问题讨论】:

    标签: ios swift uiviewcontroller uitabbarcontroller


    【解决方案1】:

    您需要在 should select 而非 didselect 中编写代码。由于选择后无法找到之前的控制器。下面是它的示例代码。

    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        if tabBarController.selectedViewController == viewController {
            print("Same viewcontroller")
        }
        return true
    }
    

    【讨论】:

    • 很好,谢谢。你只需要返回 true。
    【解决方案2】:

    你可以使用下面的扩展来获取tabbarcontroller的top viewcontroller吗?

    扩展 UIViewController {

    var top: UIViewController? {
        if let controller = self as? UINavigationController {
            return controller.topViewController?.top
        }
        if let controller = self as? UISplitViewController {
            return controller.viewControllers.last?.top
        }
        if let controller = self as? UITabBarController {
            return controller.selectedViewController?.top
        }
        if let controller = presentedViewController {
            return controller.top
        }
        return self
    }
    

    }

    你可以在下面使用上面的扩展

     if let rootViewController = UIApplication.top() {
        //do with Active view controller
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-13
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2017-09-02
      相关资源
      最近更新 更多