【问题标题】:Popover controller not dismiss when click on other bar button but dismiss when click other button(or outside popover)单击其他栏按钮时弹出框控制器不会关闭,但单击其他​​按钮(或外部弹出框)时会关闭
【发布时间】:2013-03-27 11:12:41
【问题描述】:

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

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

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

谢谢,

【问题讨论】:

    标签: ios ipad uipopovercontroller dismiss uipopover


    【解决方案1】:

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

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

    【讨论】:

    • 但我的情况是有 5 个 barbutton 每个使用不同的 popover 实例。现在我修复了这个解决方案。但是为什么这两种表示方法的行为不同。
    【解决方案2】:

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

    // 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”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多