如何确定视图控制器

时间:2013-04-24 09:53:06

标签: iphone ios uiviewcontroller

我有三个视图控制器A,B和C. A和B都呈现视图控制器C.如何知道哪个视图控制器呈现了视图控制器C?

P.S:一旦确定哪个视图控制器显示控制器C,我想隐藏/取消隐藏一些按钮。

4 个答案:

答案 0 :(得分:2)

只需将int viewController中的C属性设置为fromViewController即可。当您从A呈现视图控制器时,意味着设置为1。如果B表示,则设置为2。展示后,当您的C视图控制器拨打电话viewWillAppear时,在此方法中,基于fromViewController,您可以隐藏或显示该特定按钮。 [这是简单的黑客攻击:)]

C的viewWillAppear ..

中的代码
if ( self.fromViewController == 1) // Set from viewController while you create C in A Controller
{
 [_hButton setHidden:YES];

}

else if ( self.fromViewController == 2) 
{
  [_hButton setHidden:NO];
}

答案 1 :(得分:0)

您可以通过多种方式执行此操作,您可以在C视图控制器中声明Boolean / anyType变量。如果使用segues来呈现C viewcontroller,则可以为该变量设置所需的值,并在加载C视图控制器时使用该变量。

如果您使用segues的示例。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     if ([segue.identifier isEqualToString:@"AtoC"]) {
            C *cobj = [segue destinationViewController];
            cobj.variable =TRUE;
    }else
   {
      cobj.variable=FALSE;
   }
}

答案 2 :(得分:0)

当您呈现模态视图控制器时,您可能会对 visibleViewController 属性更感兴趣,该属性将为您提供当前视图的控制器,无论其是以模态方式呈现还是推送到导航叠加。

在呈现C之前保存 visibleViewController.nibName ,并在显示C之后检查visibleViewController.nibName是否等于A或B:)

//before presenting VC C
appdelegate.myController = self.navigationcontroller.visibleViewController.nibName;

//after VC C is presented
if([appdelegate.myController isEqualToString:@"A"]) {

    //Write your code
}
else {
    //Write other code 
}

答案 3 :(得分:0)

C不应该关心A或B. 而是让A和B在C中设置一些状态,告诉它是否显示按钮,或让他们将自己设置为C的委托, C可以询问他们是否显示按钮。无论哪种方式,您都可以使用其他视图控制器中的C而无需更改C.