第二次单击主按钮时,MGSplitViewController不会自动关闭

时间:2012-04-05 16:23:47

标签: objective-c uisplitviewcontroller uibarbuttonitem

这基本上是继续:Dismissing iPad UIPopoverController when BarButtonItem is pushed while it's open,但我认为问题足够大,以至于它需要另一个问题。

基本上,他们希望在单击barbuttonitem(由splitviewcontroller提供)时显示弹出窗口,然后在再次单击相同的barbuttonitem时隐藏弹出窗口。他们通过致电解决了这个问题:

- (void)splitViewController:(UISplitViewController*)svc popoverController:(UIPopoverController*)pc willPresentViewController:(UIViewController *)aViewController{
    if ([popoverController isPopoverVisible]) {
        [popoverController dismissPopoverAnimated:YES];
    }
}

但是,我遇到的问题是,在第一次点击barbuttonitem时,正确调用此方法并显示弹出框。但是,在弹出窗口打开时随后点击barbuttonitem时,不会调用此方法。

更令人费解的是,当我通过其他方式关闭弹出窗口视图(单击弹出窗口外部)时,弹出窗口会自动关闭。但是,单击按钮本身不会关闭弹出窗口,也不会调用“willPresentViewController”方法。

是否有其他方法可以捕捉此按钮点击操作?或者在弹出窗口打开时点击按钮时没有调用该方法的任何想法?

1 个答案:

答案 0 :(得分:0)

因此,当您再次单击“主”按钮时,似乎正常的UISplitViewController会自动关闭,但是,我正在使用MGSplitViewController。所以我修改了MGSplitViewController.m(特别是showMasterPopover :)来处理第二次单击按钮时自行解除,如下所示:

-(IBAction)showMasterPopover:(id)sender
{
    if (_hiddenPopoverController && !(_hiddenPopoverController.popoverVisible)) 
    {
        // Inform delegate.
        if (_delegate && [_delegate respondsToSelector:@selector(splitViewController:popoverController:willPresentViewController:)]) 
        {
            [(NSObject <MGSplitViewControllerDelegate> *)_delegate splitViewController:self popoverController:_hiddenPopoverController willPresentViewController:self.masterViewController];
        }
        // Show popover.
        [_hiddenPopoverController presentPopoverFromBarButtonItem:_barButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }
    else if(_hiddenPopoverController && _hiddenPopoverController.popoverVisible)
    {
        [_hiddenPopoverController dismissPopoverAnimated:YES];
    }
}