找出你来自哪个视图控制器

时间:2013-12-18 14:19:03

标签: ios iphone objective-c uiviewcontroller

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

我有viewController A(放置viewcontroller)。在viewcontroller A上有3个按钮(网站按钮,地图按钮,费率按钮)。当用户按下Rate按钮时,他们会转到Rate viewcontroller。当他们从viewController返回时,我必须在viewController A(放置视图控制器)上/内执行“操作”。当用户按下“网站按钮”或“地图按钮”时,不需要采取任何措施。

有没有办法可以检查我刚刚来自哪个viewcontroller?

有人有任何建议吗?

感谢。

4 个答案:

答案 0 :(得分:1)

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

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

您的PlaceViewController符合此协议,该协议可能有-rateViewControllerCompletedSomeThing这样的方法,RateViewController可以在完成后发送。在此方法的PlaceViewController's实施中,它可以解除/弹出RateViewController,并在RateViewController被解除时执行您想要执行的任何操作。

答案 1 :(得分:1)

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

如果是导航,导航控制器在属性'viewController'中有一堆视图控制器。

在这种情况下最好的事情是使用协议,只需设置一个委托。

答案 2 :(得分:1)

是的。 UIViewController类根据the docs

声明属性presentingViewController
  

如果显示收到此消息的视图控制器   另一个视图控制器,此属性保存视图控制器   正在呈现它。如果没有呈现视图控制器,而是其中之一   它的祖先正在呈现,这个属性持有的观点   控制器呈现最近的祖先。如果既不是观点   控制器或其任何祖先都被提出,这个属性   没有。

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

UIViewController *oldVC = self.presentingViewController;

答案 3 :(得分:1)

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

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