我开发了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];
答案 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)
你有没有做过这项工作?
UINavigationController
是UIViewController
的子类,但不是ContentViewController
(UIViewController
或UITableViewController
),如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];