4
我有一個iPad SplitViewController應用程序,我可以在縱向和橫向模式下隱藏左窗格。當應用程序收到某個通知時,我需要在其彈出窗口中顯示左窗格。儘管嘗試了許多不同的建議解決方案,但我正在努力研究如何實現這一點。iPad SplitViewController以編程方式顯示彈出窗口
我使用的是實施MultipleMasterDetailManager包含以下代碼:
/* forward the message to the current detail view
* all detail views must implement UISplitViewControllerDelegate
*/
-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
self.masterBarButtonItem = barButtonItem;
self.masterPopoverController = pc;
barButtonItem.title = NSLocalizedString(@"Show Sidebar", @"Show Sidebar");
[self.currentDetailController.navigationItem setLeftBarButtonItem:self.masterBarButtonItem animated:YES];
}
/* forward the message to the current detail view
* all detail views must implement UISplitViewControllerDelegate
*/
-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
//if (![self.currentDetailController isKindOfClass:[SyncSourceDetailViewController class]])
//{
self.masterBarButtonItem = nil;
self.masterPopoverController = nil;
[self.currentDetailController.navigationItem setLeftBarButtonItem:nil animated:YES];
//}
}
類似的方法在細節視圖控制器本身存在。
那我打電話時,收到該通知的方法如下:
- (void)navigateToLatest
{
[self navigateToDocumentsTab];
[[self dataLoader] navigateToLatest]; // populates data for the left table view
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UIView *view = [[[[[splitViewController viewControllers] objectAtIndex:1] viewControllers] objectAtIndex:0] view];
[self.masterDetailManager.masterPopoverController presentPopoverFromRect:CGRectMake(0, 0, 100, 100) inView:view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
這是行不通的。我也嘗試使用presentPopoverFromBarButtonItem方法,但我似乎無法找到代碼中的leftBarButtonItem。
也許我正在做這個完全錯誤的方式。
這一觀點:'的UIView *視= [[[[[splitViewController viewControllers] objectAtIndex:1] viewControllers] objectAtIndex:0] view];'這真的是你想要使用的父視圖? – slf 2012-08-08 02:42:16
@slf - 你是對的,我一直在繼續工作,我已經確定我需要的視圖是:self.masterDetailManager.currentDetailController.view。然而,這仍然不起作用 - 我有一種感覺,這是與時間的關係,因爲此視圖的leftBarButtonItem在此時不存在,並且masterDetailManager中的willHideViewController會在我的navigateToLatest方法後面調用。 – daveywc 2012-08-08 02:52:33
@slf - 我已經能夠使用類似的代碼顯示左側窗格從BarButtonItem工作,所以我知道我不是太遙遠。也許我需要延遲電話以某種方式顯示左側窗格。 – daveywc 2012-08-08 02:53:55