【问题标题】:UITableViewController : "Popovers cannot be presented from a view which does not have a window. "UITableViewController :“无法从没有窗口的视图中呈现弹出框。”
【发布时间】:2013-09-24 07:15:16
【问题描述】:

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

【问题讨论】:

  • if (self.view.window != nil) { [self.popOver presentPopoverFromRect:rectInSuperview inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES]; }

标签: ios uitableview uipopovercontroller


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    你可以这样试试,

     CGRect rect = [tableView convertRect:[tableView rectForRowAtIndexPath: tableRowID]
                                          toView:tableView];
    
      [self.popOver presentPopoverFromRect:rect
                                               inView:tableView
                             permittedArrowDirections:UIPopoverArrowDirectionLeft
                                             animated:YES];
    

    【讨论】:

      【解决方案3】:

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

      UITableViewCell * cell = [tab cellForRowAtIndexPath:tableRowID];
      
      [self.popOver presentPopoverFromRect:cell.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
      [contentViewController release];
      

      【讨论】:

        【解决方案4】:

        你做过这个工作吗? UINavigationControllerUIViewController 的子类,但它不是 Apple 在他们的 View Controller Programming guide 中记录的 ContentViewControllerUIViewControllerUITableViewController)。

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

        【讨论】:

        • 相同的代码适用于 IOS 6.1,但不适用于 IOS 7 SDK。只要您不向上导航层次结构和poptoroot,相同的代码就可以工作。使用我的代码,我尝试使用不同的对象 UIButtons 作为具有相同结果的锚
        • 您也可以查看此链接 - 似乎与您得到的类似 stackoverflow.com/questions/3377001/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 2011-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多