在我添加了一个新的初始 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,我在其中显示带有 UIActivityIndicator 的图像。当然,数据加载现在发生在这个 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