2013-03-05 117 views

回答

5

爲此,您可以使用appdelegate.m文件中的委託方法

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    //put your dissmiss popover code here 
} 
+2

對於這種方法工作,你需要在appDelegate中保留popoverController的引用,這可能不是一個好的選擇。 @David Haynes和nsgulliver的答案會更好。 – Anupdas 2013-03-05 12:58:38

+0

@Anupdas你是對的。 – Dilip 2013-03-05 12:59:29

+0

不錯的答案+1。 – 2013-03-05 13:06:55

4

發送您的應用程序委託的willResignActive方法的NSNotification,幷包含彈出視圖控制器,聽它,並將它在收到通知時解除所述彈出窗口。

5

最好是註冊您的控制器爲UIApplicationDidEnterBackgroundNotificationUIApplicationWillResignActiveNotification,並在您的應用程序轉到後臺時關閉它,這會讓您的生活更加輕鬆。

viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(myMethod) 
               name:UIApplicationDidEnterBackgroundNotification object:nil]; 

實現方法註冊的通知,並

-(void)myMethod{ 
    // dismiss popview here 
    } 

終於在您的視圖控制器從通知取消註冊

-(void)dealloc{ 
[[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 
+0

不想使用通知,是否有任何方法從窗口獲取UIPopoverController實例,因爲我們可以獲取警報,操作表。 – Ashwani 2013-03-05 12:58:49

+0

我覺得最好是使用通知,而不是直接在appDelegate中調用viewcontroller的代碼 – nsgulliver 2013-03-05 13:01:18

+0

我在窗口的子視圖上遞歸迭代以取消警報和工作表,尋找類似的方法 – Ashwani 2013-03-05 13:06:50

0

試試這個

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    //[popover dissmissPopoverAnimated:YES]; 
}