iPad:如何从“内部”关闭UIPopoverController;“砰的一声”;视图控制器

iPad:如何从“内部”关闭UIPopoverController;“砰的一声”;视图控制器,ipad,uipopovercontroller,popover,dismiss,Ipad,Uipopovercontroller,Popover,Dismiss,我正在将iphone项目转换为ipad。在iphone上,我有一个mainViewController,可以使用addSubView打开loginViewController 在iPad上,我想在一个popover中显示loginViewController。所以我做了一些类似的事情: UIPopoverController *loginPop = [[UIPopoverController alloc] initWithContentViewController:loginViewContro

我正在将iphone项目转换为ipad。在iphone上,我有一个mainViewController,可以使用
addSubView
打开loginViewController

在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容器(不使用委托或通知)?

是的,您的
loginViewController
应该保留对popover的引用。然后您可以使用popover本身的
dismissPopoOveranimated:
方法删除它。

实际上,我想实现这一点,但我记得我们可以访问应用程序委托,它反过来将访问它的主视图,在那里,您可以存储popover的属性,您可以调用
dismissPopoverAnimated

像这样:

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

这不是循环引用吗?因为PopoverController是用loginController初始化的(显然有一个引用)?好像这里有一个反模式。。。有人吗?你可能会让这个参考很弱。