我有三个视图控制器A,B和C. A和B都呈现视图控制器C.如何知道哪个视图控制器呈现了视图控制器C?
P.S:一旦确定哪个视图控制器显示控制器C,我想隐藏/取消隐藏一些按钮。
答案 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.