0

ビュー コントローラは、スーパー ビュー コントローラから pushViewController または presentModalViewController によって取得される場合があります。このView Controllerでは、コントローラーの方向をどのように知る必要がありますか? ビューを閉じるために必要です -

if (presentModalViewController ) {
        [self dismissModalViewControllerAnimated:YES];
    }else{
        [self.navigationController popViewControllerAnimated:YES];
    }

ありがとう

4

3 に答える 3

2

ビューがnavコントローラーにない場合(たとえば、表示されたため)、self.navigationControllerはnilになります。もちろん、navコントローラーを提示して持っている場合は、さらに深く掘り下げる必要があります。

さらに、提示されなかった場合、「self.presentingViewController」はnilになる可能性があります。

iOSの一般的なイディオムは、ビューを閉じることを処理するための単純なプロトコルを作成することです。プッシュ/提示するビューはデリゲートであり、「viewWantsToClose」ターゲットが呼び出されます。新しいユーティリティプロジェクトを作成すると、私が話していることがわかります。これは、Appleが「情報」ビューを閉じる方法です。ビューに「doCloseAction」のブロックを受け入れさせることができる可能性があります。

于 2013-02-03T20:26:23.510 に答える
0

ビューをプッシュまたは提示する責任があるため、いつビューをポップまたは閉じるかを知っておく必要があります。この種のチェックをまだ実行する必要がある場合self.navigationControllerは、子ビューから nil かどうかを確認できます。

于 2013-02-03T20:24:32.777 に答える
0

できるよ:

if (self.navigationController == nil) {
      //[self dismissModalViewControllerAnimated:YES]; //Deprecated in iOS 6.0
      [self dismissViewControllerAnimated:YES completion:nil];
}else{
    [self.navigationController popViewControllerAnimated:YES];
}

また

NSArray* views = [self.navigationController viewControllers];
if (self.navigationController == nil || self == [views objectAtIndex:0])
{
   //In the root view of navigationController or a presented View.
   [self dismissViewControllerAnimated:YES completion:nil];
}else{
   [self.navigationController popViewControllerAnimated:YES];
}
于 2013-02-03T22:03:57.020 に答える