0

viewWillAppearについて一般的な質問があります。ビュー1を考慮してビューを新たにプッシュしました。view1が別のビュー(view2)をプッシュした場合、そのメソッドに対してviewWillAppearが呼び出されます。ここで、view2がポップされた場合、view1のviewWillAppearが再度呼び出された場合、どの場合に呼び出されたかを知ることができます(つまり、他のビューが新しくプッシュまたはポップされたためです)。

私の質問が理解できることを願っています:)

TIA

4

4 に答える 4

0

率直に言って、私はその状態を適切に判断する方法を知りません。もちろん、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回だけ呼び出されます。

于 2012-08-07T09:11:40.983 に答える
0

ビューが画面に表示される(表示される)たびに、viewWillAppearメソッドが呼び出されることを覚えておいてください。

あなたの場合、view2が再びポップされると、view1が画面に表示されるため、viewWillAppear再び呼び出されます。新しいViewControllerを押すと同じように、その新しいViewControllerが画面に表示されます。そのビューを表示する前に、その新しいビューコントローラviewWillAppearが呼び出されます。

私はそれが理にかなっていることを願っています。

于 2012-08-07T09:06:11.980 に答える
0

値を使用BOOLして初期化できますFALSEviewWillAppearそのbool値TRUEを作成し、そのbool値が真であるかどうかを確認するだけで、ビューが2回目に表示されることを意味しますviewWillAppearTRUEFALSE

于 2012-08-07T09:13:59.530 に答える
0

あなたの文脈に応じて、あなたは使用したい...

viewWillAppear/viewDidAppearの場合

isBeingPresented
isMovingToParentViewController

viewWillDisappear/viewDidDisappearの場合

isBeingDismissed
isMovingFromParentViewController
于 2012-08-07T09:18:49.903 に答える