单击其他栏按钮时弹出控制器不会被忽略但单击其他​​按钮(或弹出窗口外)时会忽略

时间:2013-04-05 06:14:03

标签: ios ipad uipopovercontroller dismiss uipopover

我使用 - “presentPopoverFromBarButtonItem”显示一个弹出框 - 之后当我点击右侧导航栏按钮中的另一个条形按钮项时,弹出框不会被忽略。

但是当我点击其他地方时,忽略了弹出窗口。 当我们使用 - “presentPopoverFromRect:inView:”显示popover时,问题就出现了 - 奇怪吗?。

因为我们没有从UIBarButtonItem获取帧如何从barbutton正确显示弹出窗口。

感谢,

2 个答案:

答案 0 :(得分: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];

我上面所做的是找到bar按钮的框架并显示popover“presentPopoverFromRect”。

答案 1 :(得分:0)

我不,你是否在弹出控制器中使用了nib或xib,但让我们尝试下面的代码

 if (_Popover != nil) {
        [_Popover dismissPopoverAnimated:YES];
    }
    else {
        [_Popover dismissPopoverAnimated:NO];
    }