我正在编写一个带有两个标签的应用。在第一个选项卡中,用户选择一些设置。然后,他们点击第二个选项卡,根据第一个选项卡中的设置随机绘制和显示卡片。在第二个标签的视图底部,有一个重新洗牌按钮。我有一个按钮segue' d到(自定义)UITabBarViewController,带有一个重写的prepare(for:sender :)函数,指示它立即返回第二个标签。在阅读了几个完全相同的问题之后,我确定我已经完成了所有的事情,根据所有的答案,它应该工作。
但是,它只会转到第一个标签。我可以再次点击第二个标签,进行重新洗牌,并正确显示一组新卡片,这样就没问题了。但是,无论何时单击重新洗牌按钮,都不会调用prepare(),因此它会转到第一个选项卡而不是第二个选项卡。为什么不调用prepare()?
这里有我的内容,故事板和代码:
class MainTabBarViewController: UITabBarController {
// var nextViewNumber = Int()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "reshuffleSegue") {
if let tabVC = segue.destination as? UITabBarController {
tabVC.selectedIndex = 2
}
}
}
}
编辑添加:如果有另一种方法可以达到预期的效果,我很乐意使用它。
答案 0 :(得分:0)
您已将prepare(for:)
方法的实现放在错误的类中。它位于源视图控制器中,它是Draw Cards视图控制器 - 而不是标签栏视图控制器。
但是,您还应该注意到,故事板中有一个灾难性的segue循环:您有从Draw Cards到Main Tab Bar的show segue,以及从Main Tab Bar到Draw Cards的父子关系。你的应用程序注定失败。你应该完全重新思考你的架构。