重新打开选项卡时 Return 到视图层次结构中的初始 ViewController
Return to initial ViewController in view hierarchy when tab is reopened
我目前遇到 UITabBarController
和 UINavigationControllers
的问题。
假设我的 UITabBar
中有 2 个 ViewControllers
:
MenuOne
MenuTwo
在 MenuOne
上,我有一个指向新 ViewController
的按钮; PageOne
。
如果我导航到第一个选项卡 (MenuOne
),然后单击带有推送转至 PageOne
的按钮,选项卡栏仍然存在。如果我点击第二个选项卡 (MenuTwo
),然后点击 return 到 MenuOne
,我将返回到 PageOne
,这是我在该视图层次结构中离开的地方。
我的理解是,这是 Apple 的意图,这就是 UITabBarControllers
使用 UINavigationControllers
的方式,但是当我在 MenuOne
中使用一些 ViewController 时,我不会希望我的用户浏览选项卡而不是被重定向到初始 ViewController
.
为了澄清,这是现在的过程:
MenuOne
> * 点击按钮 * > PageOne
> * 点击标签 * > MenuTwo
> * 点击选项卡 * > PageOne
这就是我希望它的工作方式:
MenuOne
> * 点击按钮 * > PageOne
> * 点击标签 * > MenuTwo
> * 点击选项卡 * > MenuOne
有人知道我该如何解决这个问题吗?
您可以像这样创建自定义 UITabBarController
:
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
self.delegate = self
}
// when a controller is selected...
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if let vc = viewController as? UINavigationController {
// pop the navigation controller to root VC
vc.popToRootViewController(animated: false)
}
}
}
在故事板中,将 UITabBarController
的 class 设置为 MyTabBarController
。
我目前遇到 UITabBarController
和 UINavigationControllers
的问题。
假设我的 UITabBar
中有 2 个 ViewControllers
:
MenuOne
MenuTwo
在 MenuOne
上,我有一个指向新 ViewController
的按钮; PageOne
。
如果我导航到第一个选项卡 (MenuOne
),然后单击带有推送转至 PageOne
的按钮,选项卡栏仍然存在。如果我点击第二个选项卡 (MenuTwo
),然后点击 return 到 MenuOne
,我将返回到 PageOne
,这是我在该视图层次结构中离开的地方。
我的理解是,这是 Apple 的意图,这就是 UITabBarControllers
使用 UINavigationControllers
的方式,但是当我在 MenuOne
中使用一些 ViewController 时,我不会希望我的用户浏览选项卡而不是被重定向到初始 ViewController
.
为了澄清,这是现在的过程:
MenuOne
> * 点击按钮 * > PageOne
> * 点击标签 * > MenuTwo
> * 点击选项卡 * > PageOne
这就是我希望它的工作方式:
MenuOne
> * 点击按钮 * > PageOne
> * 点击标签 * > MenuTwo
> * 点击选项卡 * > MenuOne
有人知道我该如何解决这个问题吗?
您可以像这样创建自定义 UITabBarController
:
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
self.delegate = self
}
// when a controller is selected...
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if let vc = viewController as? UINavigationController {
// pop the navigation controller to root VC
vc.popToRootViewController(animated: false)
}
}
}
在故事板中,将 UITabBarController
的 class 设置为 MyTabBarController
。