关于ios:找出你来自哪个视图控制器

Find out which view controller you came from

本问题已经有最佳答案,请猛点这里访问。

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

我有VIEW控制器A(地方VIEW控制器)。在ViewController A上有3个按钮(网站按钮、地图按钮、速率按钮)。当用户按下"速率"按钮时,会转到"速率视图控制器"。当它们从视图控制器返回时,我必须在视图控制器A(Place View Controller)上/内部"做些事情"。当用户按下"网站按钮"或"地图按钮"时,不需要执行任何操作。

有没有方法可以检查我刚从哪个视图控制器来?

有人有什么建议吗?

谢谢。


一个简单的方法是将类属性添加到(例如bool didcomefromrate)。然后在速率vc中添加类似下面的代码。然后,可以在加载视图控制器A时检查该属性。

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

是的。UIViewController类声明一个属性presentingViewController,根据文档

If the view controller that received this message is presented by
another view controller, this property holds the view controller that
is presenting it. If the view controller is not presented, but one of
its ancestors is being presented, this property holds the view
controller presenting the nearest ancestor. If neither the view
controller nor any of its ancestors are being presented, this property
holds nil.

在您的UIViewController子类中使用此属性时,您将希望引用这样的属性:

1
UIViewController *oldVC = self.presentingViewController;


如果打开一个模态视图控制器(PrimeVIEW控制器),您可以使用视图控制器的"PaleVIEW控制器"属性。

如果是导航,则导航控制器在属性"view controller"中具有视图控制器堆栈。

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


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

你可以定义一个协议,比如说,RateViewControllerDelegateRateViewController将有一个符合本协议的委托。

您的PlaceViewController将符合此协议,该协议可能有一种方法,如-rateViewControllerCompletedSomeThingRateViewController完成后可以发送该方法。在EDOCX1和5实现此方法时,它可以删除/弹出EDOCX1×1,并且在EDCX1 1被删除时做任何您想做的事情。