2013-04-24 62 views
1

我有三个视图控制器A,B和C.A和B都呈现视图控制器C.我怎样才能知道哪个视图控制器呈现视图控制器C?如何确定视图控制器

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

+0

您的问题尚不清楚。请解释清楚 – Sovannarith 2013-04-24 09:55:52

+0

假设视图控制器C已经呈现。你将如何确定视图控制器A或B是否呈现C? – 2013-04-24 10:04:08

回答

2

只需设置int场所在C的viewController作为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]; 
} 
+0

你的黑客为我工作。谢谢:) – 2013-04-24 10:18:45

+0

如果你想走这条路,你可以使用视图控制器视图的标签属性。 – 2013-04-24 10:34:42

+0

@ 0x7fffffff在您的视图呈现之前,您的视图是否有被创建的机会? – Mani 2013-04-24 10:43:20

0

你可以做到这一点的方法很多,可以声明用C视图控制器布尔/ anyType的变量。如果您使用segues来呈现C视图控制器,则可以为该变量设置所需的值,并在加载C视图控制器时使用该变量。

示例如果您正在使用segues。

​​
0

如你呈现一个模式视图控制器,你可能会更感兴趣的是visibleViewController属性,它会给你的控制器当前视图是否其模态呈现或推送到导航堆栈。

保存visibleViewController.nibName呈现C,在一个变量,并检查是否提出后C :)

//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 
} 
0

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

相关问题