0

我开发了 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

4 回答 4

1

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

于 2013-09-24T07:19:12.103 回答
0

试试这个它会帮助你。只需从 tableView 中找出选定的单元格。

UITableViewCell * cell = [tab cellForRowAtIndexPath:tableRowID];

[self.popOver presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
[contentViewController release];
于 2013-09-24T07:35:45.823 回答
0

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

你可以这样试试

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

  [self.popOver presentPopoverFromRect:rect
                                           inView:tableView
                         permittedArrowDirections:UIPopoverArrowDirectionLeft
                                         animated:YES];
于 2013-09-24T07:19:25.870 回答
0

你做过这个工作吗?这UINavigationController是 a 的子类,UIViewController但它不是Apple 在他们的 View Controller Programming guide 中记录 的ContentViewController(UIViewController或)。UITableViewController

无论如何,几周前我收到了同样的消息,我把它作为一个错误报告给了苹果。在我的情况下,如果我使用导航控制器进入视图层次结构,一旦我弹出到根目录并打开一个弹出窗口(从根视图),它会报告 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];  
于 2013-09-24T08:01:37.117 回答