UINavigationController"表现得很疯狂"在我添加了一个新的初始UIViewController

时间:2015-09-17 04:37:13

标签: ios xcode swift uinavigationcontroller

我将UINavigationController设置为初始视图控制器。该导航控制器的根视图控制器显示一个菜单,用户可以在其中查看产品类别(如果有人对此感兴趣:))。根视图控制器从URL加载JSON数据,因此在视图显示之前需要一些时间(这很好)。该数据将在所有应用中使用,因此这是一个重要的步骤。

好吧,由于数据加载需要一段时间,我添加了一个新的UIViewController,我在其中显示了一个带有UIActivityIndi​​cator的图像。当然,数据加载现在发生在这个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
}

非常感谢任何帮助,非常感谢!

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案是通过设置:

来更改当前的活动视图控制器
let newController = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as? UINavigationController
UIApplication.sharedApplication().keyWindow!.rootViewController = newController