【问题标题】:UINavigationController "acting crazy" after I added a new initial UIViewController在我添加了一个新的初始 UIViewController 之后,UINavigationController “表现得很疯狂”
【发布时间】: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
}

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

【问题讨论】:

    标签: ios xcode swift uinavigationcontroller


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多