无法从没有窗口的视图中呈现popup窗口
这个错误表明:
“从没有窗户的angular度来看,不能呈现出来。”
您添加popup窗口的视图必须已经添加到“addSubview:”方法的窗口中。
尝试等待
- (void) didMoveToWindow
被调用的视图,然后加载popover
拯救了我的生命的东西:
if (self.view.window != nil) [popoverController presentPopoverFromRect:CGRectMake(44, yCoord, 111, 111) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
通过添加条件,它不会再崩溃了。 我不明白,因为presentPopoverFromRect
函数总是被调用。 没有任何情况下,窗口将是零,但无论如何,它的伎俩。
编辑:我有这个代码viewDidAppear
。 尽pipe如此,在大多数情况下,将presentPopoverFromRect
移动到viewDidAppear
或didMoveToWindow
就足够了,但在我的情况下,由于某些原因if条件是必要的。
我有这个问题。
我有一个UITabBarController
作为详细视图,并且我将barButtonItem设置为标签栏中所有三个导航控制器上的leftBarButtonItem。
vcChart.navigationItem.leftBarButtonItem = barButtonItem; vcAnalysis.navigationItem.leftBarButtonItem = barButtonItem; vcTechnicals.navigationItem.leftBarButtonItem = barButtonItem;
只有最后一个join的是有效的,而前两个会在点击时抛出exception。
为了解决这个问题,我只为可见视图控制器设置了leftBarButtonItem,并且每当用户切换选项卡时,都将barButtonItem切换到可见视图控制器。
刚刚遇到这个问题。 原来inView:参数使用了IB中没有连接的IBOutlet。 因此,试图在零时间推出popover。 这是行不通的。
所以,请确保您使用有效的视图。
有很多方法可以解决这个错误。 基本上你需要等待调用presentPopover
命令,直到你的调用视图被添加到一个窗口。 我这样做了。
- (void)viewDidAppear:(BOOL)animated { [self methodThatDisplaysPopOver]; }
我的presentPopoverFromRect
调用是在我的methodThatDisplaysPopOver
函数中。
你可以保护每个presentMobiMaciek拨打电话这个build议。
if (self.view.window != nil) [popoverController presentPopoverFromRect:CGRectMake(10, 10, 100, 100) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
不过,我认为最好能够明白self.view.window何时被赋值,并确保在视图有窗口后显示popup窗口。
与Lewis相同,将相同的UIBarButtonItem
分配给多个导航项目时,我收到了相同的错误消息。 我的示例稍微复杂一点,因为我使用的是UISplitViewController
。
在我的RootViewController
我有一个数组的数组来完成表中的多个部分。 每当用户单击表中的一行时,一个新的“细节”视图控制器被放置在我的splitViewController的右窗格中。 在设置leftBarButtonItem = nil
,我会在点击“菜单”button3-4次之后收到一个段错误,错误号为a111。 我更新我的代码,实际上检索以前的详细信息视图控制器,并将leftBarButtonItem项目设置为零。
allData
是我的NSMutableArray,它包含几个其他的NSMutableArrays作为对象。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Retrieve the new detail view controller UIViewController *detailViewController = [[self.allData objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; // Add the detail view controller to a navigation controller and set the bar style UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController]; detailNavigationController.navigationBar.barStyle = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIBarStyle"]; // Retrieve previous detail view controller and remove the leftBarButtonItem UINavigationController *previousDetailNavigationController = [splitViewController.viewControllers objectAtIndex:1]; UIViewController *previousDetailViewController = [[previousDetailNavigationController viewControllers] lastObject]; previousDetailViewController.navigationItem.leftBarButtonItem = nil; // Update the split view controller's view controllers array. NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailNavigationController, nil]; splitViewController.viewControllers = viewControllers; [detailNavigationController release]; [viewControllers release]; // Dismiss the popover if it's present. if (popoverController != nil) { [popoverController dismissPopoverAnimated:YES]; } // This sets the left bar to nil when in landscape and equal to "Menu" when in portrait. // We need to remove rootPopoverButtonItem from the previous viewController... detailViewController.navigationItem.leftBarButtonItem = rootPopoverButtonItem; }
错误信息起初有点欺骗,但上面的答案帮助我。 我想知道为什么我可以点击“菜单”button之前,在段错误前3-4次…我会进一步调查。
当inView:Parameter不正确时也会发生此错误 – 要testingtry self.view
是的,你是对的,但我们仍然可以从父类中添加子视图。 所以它可以用一个窗口来表示:
[popoverController.contentViewController.view addSubview:mySubView];
我和OP有相同的错误信息,与TPoschel报告的情况非常相似,除了我在细节窗格中有一个带有embedded式标签栏控制器的分割视图控制器和一个导航控制器。 栏button项目被添加为导航栏leftBarButtonItem。
只有在iOS5.0(而不是5.1),它似乎要求您通过将其设置为无效将选项卡栏上的酒吧button项目无效。 在添加barbutton到选项卡上的导航栏之前,
如果我不这样做,从debugging我自己的代码,酒吧button项的窗口属性保持设置为零,并导致exception, 返回到您以前去过的屏幕。 我猜测是在导航项中设置leftBarButtonItem的副作用,它会closures并设置框架。 但是,除非button与当前设置的不同,否则它似乎没有什么麻烦。 因此,当离开一个标签时,需要将其设置为零,即使它在技术上与传递的button相同。
我会赞成TPoschel的答案,除了SO不会让我。
我有这样的问题。 收到此消息时,单击一个自定义的UIBarButton
项目调用一个select器方法与performSeque。
问题是我的segue仍然附加到UIBarButton
项目。 它应该被附加到视图控制器的主视图。 改变了这一点,工作正常。
PS,所有这一切都开始了,因为我想添加和“信息”button到我的UIToolBar
。 这不是系统提供的列表中的一个,应该是。
将有一个视图,你要求显示你的popup窗口。这个错误的原因是因为你没有把这个视图作为窗口的子视图。
[self.view addSubview:displayPopOverVC];
其中displayPopOverVC是popOver出现的视图控制器
我有同样的问题,在viewDidAppear添加PresentPopOver后 ,这已经解决了
- (void) viewDidAppear:(BOOL)animated{ CGRect popoverRect = screenBounds; popoverRect.size.width = MIN(popoverRect.size.width,0) ; popoverRect.origin.x = screenBounds.origin.x; [popoverController presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
这发生在inView中:self.view应该在@ hey68You和MobiMaciekbuild议的viewDidLoad之后调用。
我replace了
[actionSheet showFromBarButtonItem:self.navigationController.navigationItem.leftBarButtonItem animated:YES];
同
[actionSheet showInView:self.view];