如何从另一个选项卡上的场景切换或弹出选项卡式应用程序中第一个选项卡的第二个场景?

Posted

技术标签:

【中文标题】如何从另一个选项卡上的场景切换或弹出选项卡式应用程序中第一个选项卡的第二个场景?【英文标题】:How can I segue or pop back to the second scene of the first tab in a tabbed app, from a scene on another tab? 【发布时间】:2015-04-05 20:52:03 【问题描述】:

我有一个带有标签栏控制器和三个标签的故事板。每个选项卡都有一个导航控制器。第一个标签有三个场景。在第三个选项卡上的视图中有一个按钮(注销),我想将它转到第一个选项卡上的第二个场景(对应于登录视图控制器并通过 Show 连接到第一个场景(例如,推送) .

这是我尝试过的:

self.tabBarController?.selectedIndex = 0

这很有效,只要我在点击 UIButton 后返回到第一个选项卡的初始场景。但由于我想进入第二个场景,这不是一个完整的解决方案。我认为解决方案可能是这样的:

self.tabBarController?.selectedViewController = LoginViewController()

self.tabBarController?.setViewControllers(self.LoginViewController, animated: true)

但我不想创建视图控制器的另一个实例。

我仍然可以使用 .selectedIndex 来实施解决方案吗?

【问题讨论】:

【参考方案1】:

您可以尝试的简单解决方案是 1. 将全局变量(即在 App Delegate 中)名称设置为布尔类型的 isLogoutClick。 2. 当您在第三个选项卡上并单击注销按钮时,然后将全局变量“isLogoutClick”设置为 true。 3.然后导航到第一个选项卡(第一个场景)并在 viewDidLoad 上检查条件 如果(appDelegate.isLogoutClick) 将您的视图推到下一个场景。 4.将isLogoutClick的值设为false。 5. 确保最初isLogoutClick 的值为false。

试试这个可能对你有帮助。

【讨论】:

【参考方案2】:

selectedIndex 设置为0 后,执行所需的转场(在本例中为"loginSegue")。如果您还没有命名,您可以在故事板中命名您的 segue。

tabBarController?.selectedIndex = 0

if let someViewController = tabBarController?.viewControllers?[0] as? SomeViewController 
    someViewController.performSegueWithIdentifier("loginSegue", sender: nil)

【讨论】:

【参考方案3】:

我不确定这是否适用于 tabBarController,因为我已将它用于我的 navigationController 但应该可以正常工作。

if let tab = self.tabBarController?.viewControllers 
    if let index = find(tab.map  $0 is LoginViewController , true) 
        let destination = tab[index] as LoginViewController
        tabBarController?.presentViewController(destination, animated: true, completion: nil)
    

使用 navigationController 我会使用 popToViewController 但我不确定 tabBarController 究竟是如何工作的

【讨论】:

以上是关于如何从另一个选项卡上的场景切换或弹出选项卡式应用程序中第一个选项卡的第二个场景?的主要内容,如果未能解决你的问题,请参考以下文章

如何显示与 TrsteelCkeditorBundle 集成的 FMElfinderBundle 的模态对话框或弹出窗口?

选项卡上的 SupportMapFragment。我只能看到一次

如何在 React Navigation 中禁用向后滑动选项或弹出路线?

如何在 Xcode 上的选项卡式应用程序中添加选项卡

如何在选项卡栏控制器中更新选项卡上的视图

如何同时切换 tab 和 pushViewController?