UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”

Posted

技术标签:

【中文标题】UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”【英文标题】:UIPopoverController & UIImagePickerControl: "Popovers cannot be presented from a view which does not have a window" 【发布时间】:2010-10-24 00:39:49 【问题描述】:

我正在尝试在我的 iPad 应用程序中显示 UIImagePickerControl。起初,调试器告诉我,在 iPad 上执行此操作时,我需要将其放在弹出窗口中。于是我写了如下代码:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[popover presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 400.0) 
                         inView:self.view
       permittedArrowDirections:UIPopoverArrowDirectionAny 
                       animated:YES];

但是,现在我收到以下错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Popovers cannot be presented from a view which does not have a window.'

对我应该做什么有什么建议吗?我知道 self.view 应该有一个窗口,但显然......它没有?

【问题讨论】:

这也可能是我发现的最快的代码块,可以让快速弹出控制器发生。干得好。 【参考方案1】:

如果在加载视图之前执行了那段代码,就会发生这种情况,因为self.view 仍然为零,因此self.view.window 也是如此。

您是否有可能在加载视图之前(在调用 -viewDidLoad: 之前)在 init 方法或其他地方执行此操作?

【讨论】:

很好的调用——我将函数调用移至-viewDidAppear:,现在它可以正常工作了!【参考方案2】:

这个错误让我感到困惑,但事实证明这是因为我传递给presentPopoverFromBarButtonItembarButtonItemUIBarButtonSystemItemFlexibleSpace 项目和实际按钮。我的用户错误,但只是让人们知道这也可以

【讨论】:

以上是关于UIPopoverController & UIImagePickerControl:“无法从没有窗口的视图中呈现弹出框”的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverController 上的 UIPopoverController

UIPopoverController 解雇

定制的 UIPopoverController?

当 UIPopoverController 在屏幕上时,无法与带有 UIPopoverController 的 UISearchBar 进行交互

UIPopoverController 没有箭头?

UIPopoverController:关闭后更新视图