4

縦向きと横向きの両方のモードで左ペインを非表示にする 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 を見つけることができないようです。

たぶん、私はこれについて完全に間違った方法で進んでいます。

4

1 に答える 1

2

私は、navigateToLatestメソッドでアプリデリゲートの「showSidebar」変数をtrueに設定することで、この問題を解決することになりました。次に、DetailViewControllerのViewDidAppearイベントで、この変数の値を確認します。それがtrueの場合は、次のコードを使用してサイドバーを表示します。

UIPopoverController *masterPopoverController= [[theAppDelegate masterDetailManager] masterPopoverController];
        [masterPopoverController presentPopoverFromBarButtonItem:[self.navigationItem leftBarButtonItem] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
        [theAppDelegate setShowSidebar:NO];
于 2012-08-08T03:19:52.263 に答える