UIPopoverController presentPopoverFromRect崩溃

时间:2012-08-30 08:56:21

标签: iphone ios uipopover

我正试图在屏幕上的某个地方创建一个简单的弹出框,但由于某种原因它只是一直在崩溃。 它没有给我任何错误(僵尸对象已启用)

UIViewController *viewController = [[UIViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
view.backgroundColor = [UIColor redColor];
viewController.view = view;

UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:viewController];
[popover presentPopoverFromRect:CGRectMake(0, 0, 100, 100) inView:self.view.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

我只是想在随机位置创建一个弹出框,这是不可能的?

编辑: 也试过这样的

@property (nonatomic, retain) UIPopoverController *popover;

@synthesize popover = _popover;

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];

_popover = [[UIPopoverController alloc] initWithContentViewController:viewController];
_popover.delegate = self;
[_popover presentPopoverFromRect:CGRectMake(0, 0, 200, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

EDIT2:它可能是相关的,我忘了提到,但是这个代码在另一个视图中被调用。

这很好用!

UIViewController *viewController = [[UIViewController alloc] init];
viewController.contentSizeForViewInPopover = CGSizeMake(200, 200);
viewController.view.backgroundColor = [UIColor redColor];

UIPopoverController *popver1 = [[UIPopoverController alloc] initWithContentViewController:viewController];
[popver1 presentPopoverFromRect:CGRectMake(250, 200, 200, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

DocumentViewController *document = [[DocumentViewController alloc] initWithIssue:_readerModel.currentIssue];
[self.navigationController pushViewController:document animated:YES];

当我在DocumentViewController中调用相同的EXACT代码时,它不起作用。

3 个答案:

答案 0 :(得分:3)

嗯。在这里看不到崩溃的原因(代码在我测试时工作正常)。

但是:如果您的代码self.view.superviewnil,则会因

之类的消息而崩溃
 [...] Popovers cannot be presented from a view which does not have a window [...]

:如果您想正确展示popover,还有一些其他问题需要处理:

  • contentSizeForViewInPopover中设置viewController属性 管理popover

  • 的实际尺寸
  • UIPopoverArrowDirectionDown更改为UIPopoverArrowDirectionAny (尤其是当您使用带有origin=(0,0)的矩形来呈现时)。 否则,您将看不到popover

答案 1 :(得分:2)

你可以在通过

显示popover之前检查窗口是否为nil

if (self.view.window != nil)

您是否也在viewDidLoadviewWillAppear

中调用上述代码

您可以尝试使用viewDidAppear方法或didMoveToWindow方法

中的相同代码

答案 2 :(得分:1)

我猜你应该将popover定义为属性,而不是局部变量