ビュー コントローラ A、B、C の 3 つがあります。A と B の両方がビュー コントローラ C を提示します。どのビュー コントローラがビュー コントローラ C を提示したかを知るにはどうすればよいですか?
PS:どのビュー コントローラーがコントローラー C を提示したかを判断したら、いくつかのボタンを非表示/非表示にしたいと考えています。
ビュー コントローラ A、B、C の 3 つがあります。A と B の両方がビュー コントローラ C を提示します。どのビュー コントローラがビュー コントローラ C を提示したかを知るにはどうすればよいですか?
PS:どのビュー コントローラーがコントローラー C を提示したかを判断したら、いくつかのボタンを非表示/非表示にしたいと考えています。
viewController のint
プロパティをとして設定するだけです。View Controller を から表示すると、に設定されます。を意味する場合は、 に設定します。表示後、View Controller が callを取得すると、このメソッドで に基づいて、その特定のボタンを非表示または表示できます。[これは単純なハックです:)]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];
}
モーダル ビュー コントローラーを提示しているので、モーダルに提示されているか、ナビゲーション スタックにプッシュされているかに関係なく、現在のビューのコントローラーを提供する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 を使用できます。
さまざまな方法で実行できます。C ビュー コントローラーで Boolean/anyType 変数を宣言できます。セグエを使用して C ビューコントローラーを表示している場合は、その変数に必要な値を設定し、C ビューコントローラーのロード中にその変数を使用できます。
セグエを使用している場合の例。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"AtoC"]) {
C *cobj = [segue destinationViewController];
cobj.variable =TRUE;
}else
{
cobj.variable=FALSE;
}
}