我将UINavigationController设置为初始视图控制器。该导航控制器的根视图控制器显示一个菜单,用户可以在其中查看产品类别(如果有人对此感兴趣:))。根视图控制器从URL加载JSON数据,因此在视图显示之前需要一些时间(这很好)。该数据将在所有应用中使用,因此这是一个重要的步骤。
好吧,由于数据加载需要一段时间,我添加了一个新的UIViewController,我在其中显示了一个带有UIActivityIndicator的图像。当然,数据加载现在发生在这个UIViewController中,而不是根视图控制器。
因此,我们的想法是在加载数据后,根视图控制器就会占据一席之地。为了做到这一点,我把一个"隐形" UIButton在新的视图控制器上并向导航控制器添加了UIStoryboardSegue,因此我在加载数据后以编程方式触发segue。
加载数据后,导航控制器实际显示并显示(当然)根视图控制器。问题是,当我单击根视图控制器上的任何按钮时,segue正确执行,但是来自" second"视图控制器(UITableViewController)如果我按下任何单元格,它会将我带回新的视图控制器(显示图像并加载数据的控制器)。好吧,实际上并不是任何一个细胞,因为有时候它实际上需要我转发到第三个细胞。视图控制器(也是UITableViewController),但在此视图控制器中出现相同的问题。如果我在任何视图控制器中单击导航栏上的后退按钮,它会将我带回新的视图控制器,而不是真正返回导航堆栈。
这是ViewDidLoad:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
load.loadAllProducts()
load.loadCategories()
self.performSegueWithIdentifier("mainStoryboardSegue", sender: self)
}
PrepareForSegue:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as? UINavigationController
let homeViewController = destination!.viewControllers.first as? HomeViewController
homeViewController!.categories = load.categories
homeViewController!.products = load.products
}
非常感谢任何帮助,非常感谢!
答案 0 :(得分:0)
对我有用的解决方案是通过设置:
来更改当前的活动视图控制器let newController = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as? UINavigationController
UIApplication.sharedApplication().keyWindow!.rootViewController = newController