从VC展开到TabBarController并更改选项卡索引

时间:2019-05-08 01:41:22

标签: ios swift uitabbarcontroller segue unwind-segue

我的故事板布局如下:

diagram of Storyboard layout

应用启动时,它会在TabIndex 1转到HomeView VC

HomeView中,我有一个按钮,我使用来选择TestView

performSegue(withIdentifier: "goToStartTest", sender: self)

现在,我想从TestView转到HistoryView。我现在看到的唯一方法是创建一个从TestViewTabBarController的segue。这样会弹出HomeView,而标签栏保持不变。我是从TestView使用

performSegue(withIdentifier: "testToRes", sender: self)

但是,这使我留在HomeView上,我需要HistoryView

我所做的研究指向使用Unwind并检测segue的来源并采取相应的措施。

任何指针/示例将不胜感激。

我在Swift 5中使用最新的Xcode。

2 个答案:

答案 0 :(得分:2)

像这样设置python -m pip install request

HomeViewController

在您的class HomeViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } var goToHistory = false override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if goToHistory { goToHistory = false // Use whichever index represents the HistoryViewController self.tabBarController?.selectedIndex = 1 } } @IBAction func unwindAndGoToHistory(_ segue: UIStoryboardSegue) { goToHistory = true } } 中,或者:

  1. TestViewController连接到UIButton图标以展开到Exit

    OR

  2. 通过将unwindAndGoToHistory:图标连接到View Controller图标(再次选择Exit)来创建程序化的展开,然后在 Document Outline中找到此标签视图,并在 Attributes Inspector 中为其提供一个标识符,例如unwindAndGoToHistory:。准备好进行搜寻时,请使用"unwindToHistory"触发它。

然后,当触发取消同步时,iOS将弹出performSegue(withIdentifier: "unwindToHistory", sender: self)并调用TestViewController。在那里,unwindAndGoToHistory()被设置为goToHistory。之后,true将被触发。由于viewWillAppear()现在是goToHistory,因此代码将设置true的{​​{1}}切换到selectedIndex的标签。

  

注意:这会将展开动画显示回tabBarController,然后视图将自动切换到HistoryViewController。如果   相反,您想立即切换到HomeViewController   动画,请覆盖HistoryViewController而不是HistoryViewController

答案 1 :(得分:0)

要从TestView转到HistoryView,应遵循以下原则:

// From TestView to HomeView(0)
navigationController?.popViewController(animated: true)
// Change the active tab in the tabcontroller
(navigationController?.presentingViewController as? UITabBarController)?.selectedIndex = 1