簡體   English   中英

如何確定視圖控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM