【问题标题】:Something like prepareForSegue but for when going back类似prepareForSegue的东西,但在回去的时候
【发布时间】:2012-02-12 18:18:07
【问题描述】:

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

【问题讨论】:

    标签: ios ios5


    【解决方案1】:

    目前没有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 做任何您需要做的事情。

    【讨论】:

      【解决方案2】:

      在您希望出现导航栏的视图的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];
      }
      

      您可以添加一些逻辑,以防您出于任何原因希望栏保持不变(例如某些下一个视图仍然需要该栏)。

      【讨论】:

      • 是的,就是这样,如果我继续前进,我希望栏保持不变,但只有当我返回时,我才会将其动画化。我可以使用什么样的逻辑来做到这一点?
      猜你喜欢
      • 1970-01-01
      • 2012-09-21
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多