1

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

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 代码时,它不起作用。

4

3 回答 3

3

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

但是:如果self.view.superview您的代码是这样的nil,它将崩溃并显示如下消息

 [...] Popovers cannot be presented from a view which does not have a window [...]

并且:如果您想popover正确呈现,还需要进行更多修复:

  • 在你的设置contentSizeForViewInPopover属性viewController 来管理你的真实大小popover

  • 更改UIPopoverArrowDirectionDownUIPopoverArrowDirectionAny (尤其是当您使用 rect with origin=(0,0)to present from 时)。否则你将看不到popover.

于 2012-08-30T09:40:05.457 回答
2

您可以在显示弹出窗口之前检查窗口是否为零

if (self.view.window != nil)

你也在viewDidLoadOR中调用上面的代码viewWillAppear吗?

viewDidAppear您可以从方法或didMoveToWindow方法中尝试相同的代码吗

于 2012-08-30T10:06:07.253 回答
1

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

于 2012-08-30T09:07:22.117 回答