私は2つのUIViewControllers AとBを持っています.
[self presentViewController:B animated:YES completion:nil];
呼び出した後dismissViewController:
、B ViewControllerller を提示した親 ViewController のメソッドを呼び出す機能が必要です。メソッドが呼び出されると思い-viewWillAppear
ましたが、却下後に機能しません。
私は2つのUIViewControllers AとBを持っています.
[self presentViewController:B animated:YES completion:nil];
呼び出した後dismissViewController:
、B ViewControllerller を提示した親 ViewController のメソッドを呼び出す機能が必要です。メソッドが呼び出されると思い-viewWillAppear
ましたが、却下後に機能しません。
コントローラBサブクラスで、コントローラAのプロパティを作成します。
@property (nonatomic, strong) ControllerA *controllerA;
コントローラBを提示する前に、プロパティを設定します。
[controllerB setControllerA:self];
コントローラBを閉じるときは、完了ブロックを使用して、実行するコントローラAのメソッドを呼び出します。
[self dismissViewControllerAnimated:YES completion:^{
[self.controllerA doSomething];
}];
(考えられる落とし穴の1つは、controllerAがcontrollerBの前に割り当て解除された場合、保持サイクルが発生することです。その場合は、controllerAをcontrollerBのデリゲートとして設定し、非公式のプロトコルを使用することをお勧めします)
解決策は、「A」ViewControllerに「B」ViewControllerを(A ViewControllerへのポインタを介して)閉じるように依頼し、完了コードで必要なことを行うことです。
iOS6 では、A、B、C の ViewController がある場合に、View Controller の「巻き戻し」機能が導入されました。C が表示されたときに、A に巻き戻すことができます。
オブジェクトを作成してからB ViewController
、1 つのカスタムinit
メソッドを実装すると、次のようになります。
このメソッドを入れてB ViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withParentView:(UIViewController *)parentViewController
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.pViewController = parentViewController;
// Custom code
}
return self;
}
B View Controller のオブジェクトを作成したら、上記のメソッドを使用すると、parentViewControllerはselfになります。
そして、あなたがカムコールを却下する時に
[self.pViewController viewWillAppear:NO];
これがあなたを助けることを願っています。
ではごきげんよう!!!