10

私のセットアップは簡単で、私の問題はこれと大差ありません。しかし、それをよりよく説明するために、ここに投稿しました:

NavController -> VC1 -> VC2

VC1 は NavController のルート ビュー コントローラーです。VC2 は、VC1 からプッシュ セグエ経由でアクセスできます。

VC1 内で次のことを検出したい:

ルート ビュー コントローラーとして (プッシュ経由で) 直接表示された VC2 がポップされた結果として表示された

私は、後で本当かどうかを教えてくれるはずだというドキュメントを読みました。

isMovingToParentViewController == NO 

ただし、そうではなく、上記の条件は常に TRUE になります。つまり、 (self.isMovingToParentViewController == NO) は常に発生しています。

これが私のコードです:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden = YES;

    //pushed to stack
    if (self.isMovingToParentViewController == YES)
    {
        //First time
      }
    else
    //popped off
    {
        //via Pop from VC2
    }    
}

viewDidAppear についても同様です。

実際の確認のために、ブレークポイントを最初に置き、次のすべてが両方の場合で FALSE であることを確認しました。

([self isMovingFromParentViewController])
([self isMovingToParentViewController])
([self isBeingPresented])
([self isBeingDismissed])

何が起こっている?絵コンテで私がおかしなことはありますか? 助けてください...

4

4 に答える 4

14

残念ながら、 isMovingToParentViewController はルート ビュー コントローラーには当てはまらないため、通常はこの状況を BOOL で処理します。

@implementation ViewController {
    BOOL isFirstAppearance;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    isFirstAppearance = YES;
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (isFirstAppearance) {
        NSLog(@"root view controller is moving to parent");
        isFirstAppearance = NO;
    }else{
        NSLog(@"root view controller, not moving to parent");
    }
}
于 2014-04-24T15:36:13.160 に答える
6

viewWillDisappear簡単な解決策は、VC1 が消失した場合に YESに設定するフラグを追加することです。それ以外の場合、ビューは一度も消えていないため、最初のプッシュ (RootViewControllerNavigation Controller) です。

サンプルコード

BOOL hasDisappeared;

-(void)viewWillAppear:(BOOL)animated
{
    if (hasDisappeared==YES) {
        //VC2 has been popped
    }
    else
    {
        //VC1 is the rootViewController
    }
}

-(void)viewWillDisappear:(BOOL)animated
{
    //Pushing to VC2
    hasDisappeared=YES;
}
于 2014-04-24T15:35:23.983 に答える