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)
| 归档时间: |
|
| 查看次数: |
29085 次 |
| 最近记录: |