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

[_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?");
}

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

最佳答案

我是个白痴,在发布了这篇文章之后就想出了解决方法。似乎对presentPopoverFromBarButtonItem的调用会自动将导航栏添加到passthroughviews中。由于我在展示UIPopoverView之前而不是之后进行清理,因此将其添加回来。简单更改 call 顺序即可解决此问题。

- (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];
}

09-30 14:44
查看更多