【问题标题】:UIPopover doesn't block UIBarbutton items from being pressedUIPopover 不会阻止 UIBarbutton 项目被按下
【发布时间】:2014-09-18 21:21:22
【问题描述】:

我正在创建一个包含一些 UIBarButton 项目的应用程序,其中一些项目会在按下时启动 UIPopoverController。我希望这可以禁用任何可以与之交互的东西,这主要是默认情况下发生的。但是,我注意到,当弹出框处于活动状态时,同一工具栏中的其他 UIBarButtonItems 仍将处于活动状态。我尝试添加:

[_popOver setPassthroughViews:nil];

在显示之前,但 UIBarButtonItems 仍然可以在显示弹出窗口时被按下。我意识到我可以禁用按钮,但我宁愿不必这样做,因为我必须在每种弹出窗口打开时引入各种不必要的状态。当在弹出框之外选择任何内容(包括其他 UIBarButtonItems)时,是否有任何方法可以关闭弹出框?

重现问题的基本代码:

- (IBAction)rightButtonPressed:(id)sender {
    UIViewController *vc = [[UIViewController alloc] init];
    _popOver = [[UIPopoverController alloc] initWithContentViewController:vc];
    [_popOver setPassthroughViews:nil];
    [_popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
}

- (IBAction)leftButtonPressed:(id)sender {
    NSLog(@"Why am I active while pop-over is visible?");
}

将两个栏按钮项添加到同一个导航栏。

【问题讨论】:

    标签: ios objective-c uibarbuttonitem uipopover


    【解决方案1】:

    我是个白痴,在发布此消息后立即想出了解决方案。似乎对presentPopoverFromBarButtonItem 的调用会自动将导航栏添加到直通视图中。由于我是在提交UIPopoverView 之前而不是之后清理的,所以它被添加回来了。只需更改调用顺序即可解决问题。

    - (IBAction)rightButtonPressed:(id)sender {
        UIViewController *vc = [[UIViewController alloc] init];
        _popOver = [[UIPopoverController alloc] initWithContentViewController:vc];
        [_popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
    
        //Call this *AFTER* presenting the popover
        [_popOver setPassthroughViews:nil];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2020-08-24
      相关资源
      最近更新 更多