2013-09-24 36 views
0

我开发的iPad应用程序。屏幕上有一个表格视图。如果用户点击任何单元格,然后打开弹出窗口。我遇到这样的错误非常罕见UITableViewController:“Popovers无法从没有窗口的视图中呈现。”

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

'如果(self.view.window =零!) { [self.popOver presentPopoverFromRect:rectInSuperview inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft动画:YES]; }' – user2545330

回答

1

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

0

它给因为你的观点的错误是在屏幕上不

你可以尝试这样的,

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

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

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

UITableViewCell * cell = [tab cellForRowAtIndexPath:tableRowID]; 

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

你有没有做过这项工作? UINavigationControllerUIViewController的一个子类,但它不是Apple在其View Controller编程指南中记录的ContentViewControllerUIViewControllerUITableViewController)。

反正我收到了同样的消息在几个星期前,我向苹果报告一个错误。在我的情况下,如果我使用导航控制器上升视图层次结构,一旦我弹出到根并打开弹出窗口(从根视图),它会报告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]; 
+0

相同的代码适用于IOS 6.1,但不适用于IOS 7 SDK。只要您不上导航层次结构和poptoroot,相同的代码就可以工作。随着我的代码,我试图使用不同的对象UIButtons作为锚点与相同的结果 – Paulo

+0

你也可以检查这个链接 - 看起来类似于你正在得到http://stackoverflow.com/questions/3377001/popovers-cannot-be-呈现从 - 一 - 视图 - 其中此结果不具备的,一个窗口?RQ = 1 – Paulo

相关问题