UIViewController
AとBがあるとします。ユーザーはプッシュセグエでAからBに移動します。ユーザーが戻るボタンを押してAに来るより。
これで、AのviewWillAppear
が呼び出されます。ここのコードで、戻るボタンから来たことを知ることができますか(navigationController popTo...
)そして別の方法ではありませんか?そして、Bビューコントローラで特別なコードを書くことなく。
うーん、多分あなたはviewWillAppear
でself.isMovingToParentViewController
を使うことができます。 docs を見てください。それがNO
なら、それは現在のViewControllerがすでにナビゲーション上にあることを意味しますスタック。
ビューコントローラAで次のことを行うのが好きです。
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (_popping) {
_popping = false;
NSLog(@"BECAUSE OF POPPING");
} else {
NSLog(@"APPEARING ANOTHER WAY");
}
//keep stack size updated
_stackSize = self.navigationController.viewControllers.count;
....
}
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_popping = self.navigationController.viewControllers.count > _stackSize;
....
}
あなたがしていることは、View Controller(B)が押されているため、または別の理由でView Controller(A)が消えているかどうかを追跡することです。次に(子ビューコントローラーの順序を変更しなかった場合)、ナビゲーションコントローラーのポップが原因で(A)が表示されているかどうかを正確に通知する必要があります。
BOOLプロパティをUIViewController
Aに追加します。
@property (nonatomic) BOOL alreadyAppeared;
次に、あなたのviewWillAppear:
メソッド、追加:
if (!self.alreadyAppeared) {
self.alreadyAppeared = YES;
// Do here the stuff you wanted to do on first appear
}