我有以下情节提要布局:

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

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

HomeView中,我有一个按钮,使用

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


现在我想从TestView转到TestView。我现在看到的唯一方法是创建一个从HistoryViewTestView的序列。这样会弹出TabBarController,而标签栏保持完整。我使用HomeView

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


但是,这使我只能使用TestView,我需要HomeView

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

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

最佳答案

像这样设置您的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
    }
}


在您的TestViewController中,可以:


UIButton连接到Exit图标以展开到unwindAndGoToHistory:

要么
通过将View Controller图标连接到Exit图标(再次选择unwindAndGoToHistory:)来创建程序化展开,然后在“文档大纲”视图中找到此序列,并在“属性”检查器中为其指定标识符,例如"unwindToHistory" 。准备好进行搜索时,请按performSegue(withIdentifier: "unwindToHistory", sender: self)触发它。


然后,当触发取消同步时,iOS将弹出TestViewController并调用unwindAndGoToHistory()。在那里,goToHistory设置为true。之后,将触发viewWillAppear()。由于goToHistory现在是true,因此代码将设置selectedIndextabBarController切换到HistoryViewController的选项卡。


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

关于ios - 从VC展开到TabBarController并更改选项卡索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56029918/

10-08 20:58