我有三个视图控制器 A、B 和 C。A 和 B 都呈现视图控制器 C。我怎样才能知道哪个视图控制器呈现视图控制器 C?
PS:一旦我确定哪个视图控制器呈现控制器 C,我想隐藏/取消隐藏一些按钮。
我有三个视图控制器 A、B 和 C。A 和 B 都呈现视图控制器 C。我怎样才能知道哪个视图控制器呈现视图控制器 C?
PS:一旦我确定哪个视图控制器呈现控制器 C,我想隐藏/取消隐藏一些按钮。
只需将viewController 中的int
属性设置为. 当您将视图控制器从设置为. 如果意味着,设置为。呈现后,当您的视图控制器调用时,在此方法中,基于,您可以隐藏或显示该特定按钮。[这是简单的 hack :)]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];
}
您可以通过多种方式做到这一点,您可以在 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;
}
}
当您呈现模态视图控制器时,您可能会对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
}
C 不应该关心 A 或 B。相反,让 A 和 B 在 C 中设置一些状态,告诉它是否显示按钮,或者让他们将自己设置为 C 的代表,以便 C 可以询问他们是否显示按钮. 无论哪种方式,您都可以在其他视图控制器中使用 C 而无需更改 C。