viewWillAppearについて一般的な質問があります。ビュー1を考慮してビューを新たにプッシュしました。view1が別のビュー(view2)をプッシュした場合、そのメソッドに対してviewWillAppearが呼び出されます。ここで、view2がポップされた場合、view1のviewWillAppearが再度呼び出された場合、どの場合に呼び出されたかを知ることができます(つまり、他のビューが新しくプッシュまたはポップされたためです)。
私の質問が理解できることを願っています:)
TIA
viewWillAppearについて一般的な質問があります。ビュー1を考慮してビューを新たにプッシュしました。view1が別のビュー(view2)をプッシュした場合、そのメソッドに対してviewWillAppearが呼び出されます。ここで、view2がポップされた場合、view1のviewWillAppearが再度呼び出された場合、どの場合に呼び出されたかを知ることができます(つまり、他のビューが新しくプッシュまたはポップされたためです)。
私の質問が理解できることを願っています:)
TIA
率直に言って、私はその状態を適切に判断する方法を知りません。もちろん、view2のviewWillDisappearメソッドでview1のプロパティを設定し、view1のviewWillAppearでそれを再設定することもできます。そのような:
view1.m:
- (void) viewWillAppear ... {
...
if (self.wasPopped) {...}
self.wasPopped = NO;
...
}
view2.m:
- (void) viewWillDisappear {
view1.wasPopped = YES; //you would have to have a reference to view1 or fetch it from the navigation controller stack.
}
しかし、私はこれがあなたが行くべき方法ではないと強く信じています。コードをviewDidLoadメソッドに移動することを検討してください。viewDidLoadは、viewWillAppearが初めて呼び出されるかなり前に、view(Controller)が作成されたときに1回だけ呼び出されます。
ビューが画面に表示される(表示される)たびに、viewWillAppearメソッドが呼び出されることを覚えておいてください。
あなたの場合、view2が再びポップされると、view1が画面に表示されるため、viewWillAppear再び呼び出されます。新しいViewControllerを押すと同じように、その新しいViewControllerが画面に表示されます。そのビューを表示する前に、その新しいビューコントローラviewWillAppearが呼び出されます。
私はそれが理にかなっていることを願っています。
値を使用BOOLして初期化できますFALSE。viewWillAppearそのbool値TRUEを作成し、そのbool値が真であるかどうかを確認するだけで、ビューが2回目に表示されることを意味しますviewWillAppear。TRUEFALSE
あなたの文脈に応じて、あなたは使用したい...
viewWillAppear/viewDidAppearの場合
isBeingPresented
isMovingToParentViewController
viewWillDisappear/viewDidDisappearの場合
isBeingDismissed
isMovingFromParentViewController