在我的iOS应用程序中,我在Xcode中使用带有segues设置的UINavigationController。对于其中一个视图,我想隐藏导航栏,而对于其他视图,我希望它显示出来。我能够在主视图中成功隐藏条形图,然后在我切换到下一个视图时很好地为其设置动画,但当我返回时(使用导航栏中的后退按钮),条形图消失,留下黑色矩形,然后切换回上一个视图。我希望能够通过与prepareForSegue相反的方式捕捉到这一点,并且很好地为导航栏设置动画。有没有办法做到这一点?
答案 0 :(得分:2)
目前没有prepareForDesegue:sender:
替代prepareForSegue:sender:
。建议的做法是在目标ViewController
中建立一个返回源ViewController
的引用。然后,当目标ViewController
被解除时,它可以通知来源ViewController
它将再次成为最高ViewController
。
通常,引用建立在prepareForSegue:sender:
。
所以,为了使这个具体,让我们假设您有ViewControllerA
,并且即将转向ViewControllerB
。在ViewControllerB
中,您将定义引用ViewControllerA
的属性。 (这通常使用协议来完成,但为了简单起见,假设ViewControllerB
具有@property ViewControllerA *delegate;
。)
然后,在prepareForSegue:sender:
中,您将执行以下操作:
ViewControllerB * vcB = (ViewControllerB *)[segue destinationViewController];
vcB.delegate = self;
稍后,在ViewControllerB
中,无论您要回到ViewControllerA
的任何代码,都可以使用self.delegate
返回ViewControllerA
,并让它知道它即将被呈现,并让它有机会用UINavigationBar
做你需要的任何事情。
答案 1 :(得分:0)
在要显示导航栏的视图UIViewController
中,放置以下方法:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
您可以添加一些逻辑,以防您因任何原因需要使用条形图(例如某些下一个视图仍需要条形图)。