UINavigationController "acting crazy" 在我添加了一个新的初始 UIViewController 之后
UINavigationController "acting crazy" after I added a new initial UIViewController
我将 UINavigationController 设置为初始视图控制器。该导航控制器的根视图控制器显示一个菜单,用户可以在其中查看产品类别(以防任何人感兴趣:))。根视图控制器从 URL 加载 JSON 数据,因此需要一些时间才能显示视图(这很好)。该数据将在所有应用程序中使用,因此这是重要的一步。
好吧,由于数据加载需要一段时间,我添加了一个新的 UIViewController,我在其中显示带有 UIActivityIndicator 的图像。当然,数据加载现在发生在这个 UIViewController 中,而不是根视图控制器中。
所以,想法是在加载数据后,根视图控制器就位。为此,我在新视图控制器上放置了一个 "invisible" UIButton,并向导航控制器添加了一个 UIStoryboardSegue,因此我在加载数据后以编程方式触发该 segue。
加载数据后,导航控制器实际出现并显示(当然)根视图控制器。问题是当我点击根视图控制器上的任何按钮时,segue 执行正确,但是如果我按下任何单元格,从 "second" 视图控制器(UITableViewController),它会带我回到新的视图控制器(那个显示图像并加载数据)。好吧,实际上不是任何单元格,因为有时它实际上需要我转发到 "third" 视图控制器(也是 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
}
非常感谢任何帮助,非常感谢!
对我有用的解决方案是通过设置以下内容来更改当前的活动视图控制器:
let newController = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as? UINavigationController
UIApplication.sharedApplication().keyWindow!.rootViewController = newController
我将 UINavigationController 设置为初始视图控制器。该导航控制器的根视图控制器显示一个菜单,用户可以在其中查看产品类别(以防任何人感兴趣:))。根视图控制器从 URL 加载 JSON 数据,因此需要一些时间才能显示视图(这很好)。该数据将在所有应用程序中使用,因此这是重要的一步。
好吧,由于数据加载需要一段时间,我添加了一个新的 UIViewController,我在其中显示带有 UIActivityIndicator 的图像。当然,数据加载现在发生在这个 UIViewController 中,而不是根视图控制器中。
所以,想法是在加载数据后,根视图控制器就位。为此,我在新视图控制器上放置了一个 "invisible" UIButton,并向导航控制器添加了一个 UIStoryboardSegue,因此我在加载数据后以编程方式触发该 segue。
加载数据后,导航控制器实际出现并显示(当然)根视图控制器。问题是当我点击根视图控制器上的任何按钮时,segue 执行正确,但是如果我按下任何单元格,从 "second" 视图控制器(UITableViewController),它会带我回到新的视图控制器(那个显示图像并加载数据)。好吧,实际上不是任何单元格,因为有时它实际上需要我转发到 "third" 视图控制器(也是 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
}
非常感谢任何帮助,非常感谢!
对我有用的解决方案是通过设置以下内容来更改当前的活动视图控制器:
let newController = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as? UINavigationController
UIApplication.sharedApplication().keyWindow!.rootViewController = newController