1

我有三个视图控制器 A、B 和 C。A 和 B 都呈现视图控制器 C。我怎样才能知道哪个视图控制器呈现视图控制器 C?

PS:一旦我确定哪个视图控制器呈现控制器 C,我想隐藏/取消隐藏一些按钮。

4

4 回答 4

2

只需将viewController 中的int属性设置为. 当您将视图控制器从设置为. 如果意味着,设置为。呈现后,当您的视图控制器调用时,在此方法中,基于,您可以隐藏或显示该特定按钮。[这是简单的 hack :)]CfromViewControllerA1B2CviewWillAppearfromViewController

代码中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];
}
于 2013-04-24T09:56:41.593 回答
0

您可以通过多种方式做到这一点,您可以在 C 视图控制器中声明一个 Boolean/anyType 变量。如果您使用 segues 来呈现 C 视图控制器,您可以为该变量设置所需的值并在加载 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;
   }
}
于 2013-04-24T10:00:03.580 回答
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 
}
于 2013-04-24T10:01:20.773 回答
0

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

于 2013-04-24T10:01:45.227 回答