![](/img/trans.png)
[英]How to determine what view controller presented the current view controller? (iphone)
[英]how to determine view controller
我有三個視圖控制器A,B和C。A和B都存在視圖控制器C。我如何知道哪個視圖控制器提供了視圖控制器C?
PS:一旦確定哪個視圖控制器為控制器C,我想隱藏/取消隱藏某些按鈕。
只需在C
viewController中將int
屬性設置為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 viewcontroller,則可以為該變量設置所需的值,並在加載C view controller時使用該變量。
如果您使用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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.