2011-03-24 63 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