创建UIPopoverController

use*_*207 4 objective-c uikit uipopovercontroller ios

我正在Xcode 4.3中创建一个popover.我没有收到任何错误消息,但是当我点击构建并运行并按下应该打开弹出窗口的按钮时,应用程序崩溃并在我的代码中以绿色突出显示一行并说:

线程1:断点2.1 ..

这是什么意思,我该如何解决?

- (IBAction)popOver
{
    SecondView *secondview = [[SecondView alloc] init];
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:secondview];    

    [popover setDelegate:self];    

    [popover presentPopoverFromRect:CGRectMake(801, 401, 300, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
    [popover setPopoverContentSize:CGSizeMake(300, 200)];   
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Lor*_*o B 16

这里几点建议......

首先,您使用的是自动参考计数(ARC)吗?如果是,你需要一个实例变量来控制你的UIPopoverController.例如:

@property (strong, nonatomic) UIPopoverController* popover;
Run Code Online (Sandbox Code Playgroud)

如果您不使用ARC创建retain一个:

@property (retain, nonatomic) UIPopoverController* popover;
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您必须这样做,因为如果没有,ARC将在您的IBAction结束时为您释放刚创建的popover.此外,您还可以为弹出窗口提供参考.见说明.如果您不使用ARC,这也是有效的.

注意在某些时候,您可能需要释放弹出窗口.例如在- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

self.popover = nil;
Run Code Online (Sandbox Code Playgroud)

然后,如果你SecondView是一个UIViewController电话SecondViewController.但这是一个简单的命名建议.

最后,从动作发送者(例如a UIButton)显示弹出窗口而不是硬编码位置的正确方法可以是:

- (IBAction)openPopover:(id)sender
{
    // create the popover here...

    UIButton* senderButton = (UIButton*)sender;

    [popover setPopoverContentSize:CGSizeMake(300, 200)];
    [popover presentPopoverFromRect:senderButton.bounds inView:senderButton permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
Run Code Online (Sandbox Code Playgroud)