我有以下情节提要布局:
应用启动时,它会转到TabIndex 1处的HomeView VC
。
在HomeView
中,我有一个按钮,使用
performSegue(withIdentifier: "goToStartTest", sender: self)
现在我想从
TestView
转到TestView
。我现在看到的唯一方法是创建一个从HistoryView
到TestView
的序列。这样会弹出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
,因此代码将设置selectedIndex
的tabBarController
切换到HistoryViewController
的选项卡。注意:这会将展开动画显示回
HomeViewController
,然后视图将自动切换到HistoryViewController
。如果相反,您想立即切换为
HistoryViewController
动画,覆盖
viewWillAppear
而不是viewDidAppear
。关于ios - 从VC展开到TabBarController并更改选项卡索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56029918/