1

我使用“presentPopoverFromBarButtonItem”显示一个弹出框——之后,当我单击右侧导航栏按钮中的另一个栏按钮项时,弹出框不会关闭。

但是当我点击其他地方时关闭弹出窗口。当我们使用“presentPopoverFromRect:inView:”来显示弹出框时,问题也不存在——奇怪吗?

由于我们没有从 UIBarButtonItem 获取框架,我如何才能从 barbutton 正确显示弹出框。

谢谢,

4

2 回答 2

1

回答我自己的问题以帮助某人,

// Presenting from BarButton will not dismiss popover when we click on other bar button.
// [self.popoverController presentPopoverFromBarButtonItem:self.barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

NSMutableArray* buttons = [[NSMutableArray alloc] init];
for (UIView *subview in self.navigationController.navigationBar.subviews) {
    if ([subview isKindOfClass:[UIControl class]])   {
        [buttons addObject:subview];
    }
}

UIView *view = [buttons objectAtIndex:1]; // The '1' is the index to your bar item in the array of .items

CGRect barButtonFrame = [self.navigationController.navigationBar convertRect:view.frame toView:self.navigationController.view];
[self.popoverController presentPopoverFromRect:barButtonFrame inView:self.navigationController.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

我上面所做的是找到条形按钮的框架并显示弹出框“presentPopoverFromRect”。

于 2013-04-15T08:18:18.140 回答
0

我不知道,无论你是否在 popover 控制器中使用了 nib 或 xib,但让我们试试下面的代码

 if (_Popover != nil) {
        [_Popover dismissPopoverAnimated:YES];
    }
    else {
        [_Popover dismissPopoverAnimated:NO];
    }
于 2013-04-05T06:49:30.810 回答