我知道SDK文档说

POTS在POPOVER的内容之外自动解雇POPOVER。

但我相信这里的聪明人找到了一种方式:) 也许我应该覆盖popover dismiss函数?

感谢

编辑: 我尝试使用PassthroughViews,如此在此建议,它完美地工作。这是谁需要它的代码 - 在这个例子中,我把self.viewvievive在数组中,这意味着在弹出窗玻片源自开发的按钮之外,没有什么可以解除一个问题。

        popoverController.passthroughViews = [[[NSArray alloc] initWithObjects:self.view, nil] autorelease];
.

有帮助吗?

解决方案

您需要设置passthroughViews属性。从文档中:

用户可以在POLPOVER可见的同时交互的视图数组。

@property (nonatomic, copy) NSArray *passthroughViews

当一个开头处于活动状态时,通常禁用与其他视图的交互,直到POPOVER被解雇。为此属性分配一系列视图允许通过相应的视图处理POPOVER之外。

passthroughViews设置为要处理触摸事件的视图数组,而不是只拒绝开口。

其他提示

所接受的答案并没有真正回答这个问题,“有没有办法在按外部拒绝它才会被解雇?”,imo。它确实提供了一个可能的视图,但可能需要黑扰访问所有父视图并确定屏幕上的视图等。问题可以被重新写作,“我如何制作一个popover视图模态?”

您会这样做,使用DONY按钮关闭POLPOVER:

UIViewController* vc = [[[UIViewController alloc] init] autorelease];

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"] style:UIBarButtonItemStyleDone target:self action:@selector(processDoneAction)] autorelease];

[vc.navigationItem setLeftBarButtonItem:doneButton];

vc.modalInPopover = YES;
//If you want full screen:
vc.modalPresentationStyle = UIModalPresentationFullScreen;
vc.wantsFullScreenLayout = YES;

UINavigationController* navC = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];

UIView* view = create your view

vc.view = view;

UIPopoverController* pc = [[[UIPopoverController alloc] initWithContentViewController:navC] autorelease];
pc.delegate = self;
self.popoverController = pc;
.

然后您将在您的processDoneacheAction方法中,您需要解除POPOVER。其他考虑因素将被驳回和重新显示设备方向变化,但我会将其留给另一个练习,因为它以前在stackoverflow上得到了回答。

有一个非常简单而合法的解决方案。在呈现您的UIPopoverController的视图控制器中,符合UIPopoverControllerDelegate协议并实现以下委托方法。我刚刚测试了这个,它确实可以防止弹出疏忽。

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    return NO;
}
.

只需确保将Popover控制器的委托设置为实现此操作的视图控制器。

您可以使用[popoverController dismissPopoverAnimated:NO];方法忽略POLDOVER。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top