我有一个包含UIButton的UIViewController(带有隐藏的UINavigationController)。单击该按钮会在另一个UIViewController上调用instantiateViewControllerWithIdentifier(并传递第二个UIViewController的一些数据)。
尽我所能,我无法让第二个UIViewController显示其UINavigationController navigationBar,即使我已将其嵌入UINavigationController中。但这并不是一场灾难,因为无论如何我并不是真的想要它,而只是隐藏它。我在第二个UIViewController中添加了一个UIButton,并在Interface Builder中进行了控制点击拖动,以添加一个" Show" segue回到第一个UIViewController。
但是现在当你访问任何其他 UIViewController(以及 之后的>)时,UINavigationBar就会丢失。
这是我如何加载第二个UIViewController:
let destinationViewController = self.storyboard?.instantiateViewControllerWithIdentifier("viewGold") as! SecondViewController
destinationViewController.results = result
self.presentViewController(destinationViewController, animated: true, completion: nil)
所以:
答案 0 :(得分:1)
所以self.presentViewController
是一个模态表示,这意味着它不包含在你的UINavigationController的导航堆栈中,因此不会显示你的导航栏。你在这里呈现正确的方式。
问题在于你从第二个视图控制器到第一个视图控制器。 Show
segue实际上创建了一个新的视图控制器并以模态方式呈现它,这绝对不是你想要的(特别是因为它创建了你的第一个视图控制器没有它的导航控制器)。相反,请使用self.presentingViewController.dismissViewControllerAnimated
以模态方式解除。
以模态方式呈现并不提供沿导航堆栈移动的相同类型的转换,这意味着您将无法获得左/右转换。通常,如果您想要导航,我建议您保持导航栏可见并在导航堆栈上工作。
答案 1 :(得分:0)
您正试图通过发明变通方案来解决缺乏框架理解的问题。
解决这个问题: 如果你想要一个嵌入在导航控制器中的控制器,那么实际上你需要提供导航控制器,因为它会在演示后随身携带所需的控制器。 所以只需出示导航控制器即可。
任何UIViewController子类都有一个名为.navigationController
的可选属性。如果有导航控制器,它将为您提供第一个直接父级。因此,通过此属性获取目标控制器的导航控制器。