这基本上是继续: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”方法。
是否有其他方法可以捕捉此按钮点击操作?或者在弹出窗口打开时点击按钮时没有调用该方法的任何想法?
答案 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];
}
}