2012-08-08 49 views
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。

也許我正在做這個完全錯誤的方式。

+0

這一觀點:'的UIView *視= [[[[[splitViewController viewControllers] objectAtIndex:1] viewControllers] objectAtIndex:0] view];'這真的是你想要使用的父視圖? – slf 2012-08-08 02:42:16

+0

@slf - 你是對的,我一直在繼續工作,我已經確定我需要的視圖是:self.masterDetailManager.currentDetailController.view。然而,這仍然不起作用 - 我有一種感覺,這是與時間的關係,因爲此視圖的leftBarButtonItem在此時不存在,並且masterDetailManager中的willHideViewController會在我的navigateToLatest方法後面調用。 – daveywc 2012-08-08 02:52:33

+0

@slf - 我已經能夠使用類似的代碼顯示左側窗格從BarButtonItem工作,所以我知道我不是太遙遠。也許我需要延遲電話以某種方式顯示左側窗格。 – daveywc 2012-08-08 02:53:55

回答

2

我最終解決了這個問題,通過在我的應用程序委託中將「showSidebar」變量設置爲navigateToLatest方法中的true。然後在我的DetailViewController的ViewDidAppear事件中,我檢查這個變量的值,如果這是真的話,我將介紹使用下面的代碼側邊欄:

UIPopoverController *masterPopoverController= [[theAppDelegate masterDetailManager] masterPopoverController]; 
     [masterPopoverController presentPopoverFromBarButtonItem:[self.navigationItem leftBarButtonItem] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
     [theAppDelegate setShowSidebar:NO]; 
相關問題