在我的iOS应用中,我使用的是带有Xcode中的segues设置的UINavigationController。对于其中一个视图,我想隐藏导航栏,对于其他视图,我想显示它。我能够成功在主视图中隐藏该栏,然后在选择下一个视图时很好地对其进行动画处理,但是当我返回时(使用导航栏中的“后退”按钮),该栏消失了,留下了黑色矩形,然后切换回上一个视图。我希望能够使用prepareForSegue的相反方法来捕捉到这一点,并很好地为导航栏设置动画。有什么办法可以做到这一点?

最佳答案

当前没有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

08-25 21:41