UITableViewController:"无法从没有窗口的视图中显示弹出窗口。 "

时间:2013-09-24 07:15:17

标签: ios uitableview uipopovercontroller

我开发了iPad应用程序。屏幕上有一个表格视图。如果用户点击任何单元格,那么我打开弹出窗口。我遇到这样的错误是非常罕见的

Fatal Exception NSInvalidArgumentException
-[UIPopoverController _commonPresentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window. 

使用以下方法;

UIViewController *contentViewController = [[UIViewController alloc] init];
[contentViewController.view setFrame:CGRectMake(0, 0, 320, 460)];
UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:contentViewController] autorelease];

self.popOver=[[UIPopoverController alloc] initWithContentViewController:navController];
self.popOver.delegate = self;

CGRect rectInTableView = [self.menuItems rectForRowAtIndexPath:tableRowID];
CGRect rectInSuperview = [self.menuItems convertRect:rectInTableView toView:self.view];
rectInSuperview.size.width=320;

[self.popOver presentPopoverFromRect:rectInSuperview inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
[contentViewController release];

4 个答案:

答案 0 :(得分:1)

这意味着self.view不在屏幕上。尝试跟踪self以查看您所指的视图控制器。

答案 1 :(得分:0)

它会出错因为您的视图不在屏幕上

你可以这样试试,

 CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath: tableRowID]
                                      toView:tableView];

  [self.popOver presentPopoverFromRect:rect
                                           inView:tableView
                         permittedArrowDirections:UIPopoverArrowDirectionLeft
                                         animated:YES];

答案 2 :(得分:0)

试试这会对你有所帮助。 只需从tableView中找到所选单元格。

UITableViewCell * cell = [tab cellForRowAtIndexPath:tableRowID];

[self.popOver presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
[contentViewController release];

答案 3 :(得分:0)

你有没有做过这项工作? UINavigationControllerUIViewController的子类,但不是ContentViewControllerUIViewControllerUITableViewController),如Apple在View Controller Programming指南中所记录的那样。

无论如何,几周前我收到了同样的消息,我向Apple报告了这个消息。在我的情况下,如果我使用导航控制器上升视图层次结构,一旦我弹出root并打开一个弹出窗口(从根视图),它报告self.View没有任何窗口。我的解决方案是改变代码以使用现有的NavigationBar作为锚视图而不是self.view。代码如下:

[popover presentPopoverFromRect:CGRectMake(0, 0, 1,self.navigationController.navigationBar.bounds.size.height) inView:self.navigationController.navigationBar permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];