【问题标题】:Find out which view controller you came from [duplicate]找出您来自哪个视图控制器 [重复]
【发布时间】:2014-01-06 18:37:58
【问题描述】:

我试图找出我来自哪个视图控制器。让我解释。

我有 viewController A(放置 viewcontroller)。在视图控制器 A 上有 3 个按钮(网站按钮、地图按钮、评分按钮)。当用户按下 Rate 按钮时,他们会转到 Rate viewcontroller。当他们从那个 viewController 回来时,我必须在 viewController A(放置视图控制器)上/内“做一些事情”。当用户按下“网站按钮”或“地图按钮”时,不需要任何操作。

有没有办法检查我刚刚来自哪个视图控制器?

有人有什么建议吗?

谢谢。

【问题讨论】:

  • 你试过什么吗? NSNotification 怎么样?

标签: ios iphone objective-c uiviewcontroller


【解决方案1】:

您可以使用委托来执行此操作。

您可以定义一个协议,例如RateViewControllerDelegateRateViewController 将有一个符合此协议的委托。

您的PlaceViewController 将符合此协议,该协议可能具有-rateViewControllerCompletedSomeThing 之类的方法,RateViewController 可以在完成时发送该方法。在此方法的PlaceViewController's 实现中,它可以解除/弹出RateViewController,并在RateViewController 被解除后执行您想做的任何其他事情。

【讨论】:

    【解决方案2】:

    如果您打开模态视图控制器 (presentViewcontroller),您可以使用视图控制器的“parentViewController”属性。

    如果是导航,则导航控制器在属性“viewController”中有视图控制器堆栈。

    在这种情况下最好的办法是使用协议,然后设置一个委托。

    【讨论】:

      【解决方案3】:

      是的,有。 UIViewController 类根据the docs 声明了一个属性presentingViewController

      如果收到此消息的视图控制器由 另一个视图控制器,此属性包含视图控制器 正在展示它。如果未显示视图控制器,但其中之一 它的祖先正在呈现,这个属性持有视图 控制器呈现最近的祖先。如果视图都没有 控制器及其任何祖先都被呈现,这个属性 保持零。

      UIViewController 子类中使用此属性时,您需要像这样引用该属性:

      UIViewController *oldVC = self.presentingViewController;
      

      【讨论】:

      • 我认为他希望反过来,即当从presentingVC返回presentingVC时,presentingVC想知道它刚刚完成了哪个VC。 Aaaand 呼吸。
      • 如果 Place viewcontroller 在 navigationController 中,然后推送到 Rate viewcontroller。在这种情况下,self.presentingViewController 是否有效?
      • @Joiningss 不,如果是这种情况,您最好按照@Avi Tsadok 的建议使用parentViewController
      • @0x7fffffff 我写了一个测试演示,self.presentingViewController 在导航中不起作用。而 self.parentViewController 是一种 UINavigationController,所以,self.parentViewController 都不起作用。 Avi Tsadok 不建议在导航中使用 parentViewController。
      • @Joiningss 正确,但他确实建议使用它,我想给他适当的信任。
      【解决方案4】:

      一种简单的方法是向 A 添加一个类属性(例如 BOOL didComeFromRate)。然后在 Rate VC 中添加类似下面的代码。然后您可以在加载视图控制器 A 时检查该属性。

      -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
      {
      UIViewController *targetVC = [segue destinationViewController];
              targetVC.didComeFromRate = YES;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        相关资源
        最近更新 更多