像prepareForSegue这样的东西,但回去的时候

时间:2012-02-12 18:18:08

标签: ios ios5

在我的iOS应用程序中,我在Xcode中使用带有segues设置的UINavigationController。对于其中一个视图,我想隐藏导航栏,而对于其他视图,我希望它显示出来。我能够在主视图中成功隐藏条形图,然后在我切换到下一个视图时很好地为其设置动画,但当我返回时(使用导航栏中的后退按钮),条形图消失,留下黑色矩形,然后切换回上一个视图。我希望能够通过与prepareForSegue相反的方式捕捉到这一点,并且很好地为导航栏设置动画。有没有办法做到这一点?

2 个答案:

答案 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];
}

您可以添加一些逻辑,以防您因任何原因需要使用条形图(例如某些下一个视图仍需要条形图)。