2011-04-19 48 views
11

在我的UISplitViewController中,主控制器是UINavigationController。 在縱向模式下,只要用戶向上導航(使用後退按鈕),我想保持導航控制器可見。一旦選擇了導航控制器的表格視圖中的項目,我想要關閉彈出窗口。 我該如何做到這一點?我的UITableViewController如何知道它是否在彈出窗口內,如果是,請自行解散?縱向UISplitViewController:如何以編程方式隱藏主Popover?

回答

20

使您的主視圖控制器爲UISplitViewControllerDelegate(如果它尚未),並將其連接到UISplitViewController的delegate插座。

在您的主視圖控制器創建UIPopoverController變量:

// MyViewController.h 
@interface MyViewController : UIViewController <UISplitViewControllerDelegate> { 
    UIPopoverController *popoverController; 
} 
@property (retain, nonatomic) UIPopoverController *popoverController; 

// MyViewController.m 
@synthesize popoverController; 

實現以下UISplitViewControllerDelegate方法:

// Called when rotating to portrait 
- (void)splitViewController:(UISplitViewController*)svc 
    willHideViewController:(UIViewController *)aViewController 
      withBarButtonItem:(UIBarButtonItem*)barButtonItem 
     forPopoverController:(UIPopoverController*)pc { 

    // Popover controller is visible in portrait 
    self.popoverController = pc; 
} 

// Called when rotating to landscape 
- (void)splitViewController:(UISplitViewController*)svc 
    willShowViewController:(UIViewController *)aViewController 
    invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { 

    // No popover controller in landscape view 
    self.popoverController = nil; 
} 

在自己的處理程序在主視圖控制器(被調用時,一個在表格視圖中選擇一個導航項目):

- (void)navigationControllerSelectedItem:(id)item { 
    // If a popover controller is visible, hide it 
    if (popoverController) { 
     [popoverController dismissPopoverAnimated:YES]; 
    } 
} 

不要忘記釋放該變量:

- (void)dealloc { 
    self.popoverController = nil; 
    [super dealloc]; 
} 

希望有所幫助!

+0

嗨mkerley,我試過上面的解決方案,但它不是調用UISplitViewControllerDelegate methods.Can你能幫我嗎? – Minakshi 2014-04-01 05:56:44

0

iOS5中SplitViewController的標準iPad示例與精心設計的答案大致相同,但popoverController稱爲masterPopoverController。

創建屬性iOS5樣式爲_popoverController不起作用,因爲那裏已經有一個名爲UIViewController.h的ivar。

0

IOS 6.0 SplitView模板具有此內置功能。詳細信息視圖會跟蹤方向和MasterViewController彈出窗口。

只要設置了detailItem,popover就會在適當的時候消失。如果您使用的是相同的detaiItem,則甚至會進行檢查,因此無法完成頁面設置和刷新工作。

self.detailViewController.detailItem = self.detailViewController.detailItem; 
相關問題