在我添加了一个新的初始 UIViewController 之后,UINavigationController “表现得很疯狂”

Posted

技术标签:

【中文标题】在我添加了一个新的初始 UIViewController 之后,UINavigationController “表现得很疯狂”【英文标题】:UINavigationController "acting crazy" after I added a new initial UIViewController 【发布时间】:2015-09-17 04:37:13 【问题描述】:

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

好吧,由于数据加载需要一段时间,我添加了一个新的 UIViewController,我在其中显示带有 UIActivityIndi​​cator 的图像。当然,数据加载现在发生在这个 UIViewController 中,而不是根视图控制器中。

所以,这个想法是在加载数据之后,根视图控制器会占据位置。为此,我在新视图控制器上放置了一个“不可见”的 UIButton,并向导航控制器添加了一个 UIStoryboardSegue,因此我在加载数据后以编程方式触发该 segue。

加载数据后,导航控制器实际出现并显示(当然)根视图控制器。问题是当我单击根视图控制器上的任何按钮时,segue 正确执行,但是如果我按下任何单元格,从“第二个”视图控制器 (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】:

对我有用的解决方案是通过设置来更改当前的活动视图控制器:

let newController = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as? UINavigationController
UIApplication.sharedApplication().keyWindow!.rootViewController = newController

【讨论】:

以上是关于在我添加了一个新的初始 UIViewController 之后,UINavigationController “表现得很疯狂”的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为新的 CollectionView 添加 TabItem

动态添加部分视图后如何重新初始化JQuery

UIViewControl之间的七种传值方式

我想在我的映射数组中添加一个新的 segmentId(同名),但 elementId 不同但方法相同

无法在视图上添加 UIButton

vscode 源代码控制提供者添加 repo