2013-03-05 168 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]; 
}