2011-03-17 69 views
49

有沒有方法檢查模態視圖是否存在?我只想在模態視圖存在的情況下運行一個方法。另外,如果我有多個模態視圖,是否有方法檢查某個模態視圖是否存在。iOS - 如何檢查模態視圖是否存在

我使用下面的代碼來呈現和解僱模態的觀點:

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

預先感謝您!

乾杯, 埃文

PS。我的模態視圖有一個視圖控制器,但我想檢查模態視圖是否存在於異步運行的單獨類中。

+7

請考慮改變正確答案爲這個問題檢查的模式view controller存在。 – Daniel 2012-02-24 15:31:05

回答

71

您是否正在檢查父視圖控制器中是否存在模態視圖控制器?如果是這樣,你可以檢查視圖控制器的modalViewController屬性:

BOOL modalPresent = (self.modalViewController); 

如果您想檢查特定模式視圖控制器,你可以得到的模態視圖控制器的類名像這樣:

NSString *modalClassName = NSStringFromClass([self.modalViewController class]); 
+54

self.modalViewController現在已被棄用,您現在應該使用BOOL modalPresent =(BOOL)(self.presentedViewController); – allaire 2012-04-26 19:33:02

+2

要搭載@ allaire的評論,以下是有關presentsViewController的文檔(http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/presentedViewController),似乎表明一個模式視圖控制器只存在於「this」視圖中。 – Danny 2013-05-29 23:46:07

53

您可以檢查使用:self.presentedViewController,返回The view controller that is presented by this view controller, or one of its ancestors in the view controller hierarchy.

+4

這應該是檢查的答案。 'modalViewController'已棄用 – nburk 2014-12-02 09:40:25

+1

現在使用'presentedViewController'。 – WMios 2016-02-09 07:54:44

5

什麼工作對我來說是以下幾點:

// 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。

+0

如果您的UIViewController嵌入到其中,請不要忘記添加UINavigationController作爲窗口的rootViewController。然後,只需在navController上調用presentViewController。 :) – 2017-05-18 17:28:19

0

您可以從父view controller

if ([[self presentingViewController] presentingViewController]) { 

}