2011-03-24 64 views
5

我正在转换和iphone项目到iPad。在iPhone上,我有一个mainViewController,它使用addSubView打开一个loginViewController。iPad:如何关闭从“弹出”ViewController内的UIPopoverController

在iPad上,我想在popover中显示loginViewController。所以我做了这样的事情:

UIPopoverController *loginPop = [[UIPopoverController alloc] initWithContentViewController:loginViewController]; 
[loginPop presentPopoverFromRect:CGRectMake(150, 150, 90, 90) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:true]; 

这工作正常。问题是,当loginViewController完成其“业务”。在iPhone上,我只是调用一个简单的[self.view removeFromSuperview];但在ipad上,这会导致将视图从PopoverController中删除,但弹出的框架保留。

所以我的问题是:是否有从loginViewController内删除其PopoverController容器(不使用委托或通知)的任何简单的方法?

回答

9

是的,你的loginViewController应该保留对popover的引用。然后,您可以使用弹出窗口的dismissPopoverAnimated:方法将其删除。

+2

Wouldent,让一个循环引用?由于PopoverController是使用loginController进行初始化的(显然这有一个引用)?在这里看起来像一个反模式......任何人? – esbenr 2011-12-28 19:09:01

+1

你可能会让这个引用变弱。 – rob5408 2012-08-06 12:45:08

1

其实我想实现,但是我记得我们可以访问应用程序委托,而这个应用程序委托又可以访问它的主视图,在那里,你可以存储弹窗的属性,并且你可以调用dismissPopoverAnimated

像这样:

MyAppDelegate *app = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; 
MyViewController * myView =[app viewController]; 
[myView.popover dismissPopoverAnimated:YES]; 
+0

哟!这是如此脆弱。 – Abizern 2013-04-23 13:56:28