我正试图在屏幕上的某个地方创建一个简单的弹出框,但由于某种原因它只是一直在崩溃。 它没有给我任何错误(僵尸对象已启用)
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代码时,它不起作用。
答案 0 :(得分:3)
嗯。在这里看不到崩溃的原因(代码在我测试时工作正常)。
但是:如果您的代码self.view.superview
为nil
,则会因
[...] 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)
您是否也在viewDidLoad
或viewWillAppear
?
您可以尝试使用viewDidAppear
方法或didMoveToWindow
方法
答案 2 :(得分:1)
我猜你应该将popover定义为属性,而不是局部变量