web-dev-qa-db-ja.com

iOS-モーダルビューが存在するかどうかを確認する方法

モーダルビューが存在するかどうかを確認する方法はありますか?モーダルビューが存在する場合にのみメソッドを実行したいと思います。また、複数のモーダルビューがある場合、特定のモーダルビューが存在するかどうかを確認する方法はありますか。

次のコードを使用して、モーダルビューを表示および非表示にします。

    [self presentModalViewController:myModalView animated:YES];
    [self dismissModalViewControllerAnimated:YES];

前もって感謝します!

乾杯、エヴァン

PS。モーダルビューにはView Controllerがありますが、モーダルビューが非同期で実行されている別のクラスから存在するかどうかを確認したいと思います。

55
Evan Johnson

親View ControllerからモーダルView Controllerの存在を確認していますか?その場合、View ControllerのmodalViewControllerプロパティを確認するだけです。

BOOL modalPresent = (self.modalViewController);

特定のモーダルビューコントローラーを確認する場合は、次のようにモーダルビューコントローラーのクラス名を取得できます。

NSString *modalClassName = NSStringFromClass([self.modalViewController class]);
75
arlomedia

self.presentedViewControllerを使用して確認できます。これはThe view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.を返します

58
tipycalFlow

私のために働いたのは以下です:

// this is the trick: set parent view controller as application's window root view controller
UIApplication.sharedApplication.delegate.window.rootViewController = viewController;

// assert no modal view is presented
XCTAssertNil(viewController.presentedViewController);

// simulate button tap which shows modal view controller
[viewController.deleteButton sendActionsForControlEvents:UIControlEventTouchUpInside];

// assert that modal view controller is presented
XCTAssertEqualObjects(viewController.presentedViewController.class, MyModalViewController.class);

私がテストした限り、これはiOS7とiOS8で動作します。ただし、iOS6で試してはいませんでした。

6
mixtly87

view controllerからのモーダルview controllerの存在を確認できます

if ( [[self presentingViewController] presentingViewController] ) {

}
1
Binoy jose