创建一个 UIPopoverController
Posted
技术标签:
【中文标题】创建一个 UIPopoverController【英文标题】:Creating a UIPopoverController 【发布时间】:2012-03-17 15:56:51 【问题描述】:我正在 Xcode 4.3 中创建一个弹出框。 我没有收到任何错误消息,但是当我单击构建并运行并按下应该打开弹出屏幕的按钮时,应用程序崩溃并在我的代码中以绿色突出显示一行并说:
线程 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)];
提前致谢。
【问题讨论】:
【参考方案1】:这里有一些建议......
首先,您是否使用自动引用计数 (ARC)?如果是,您需要一个实例变量来控制您的UIPopoverController
。例如:
@property (strong, nonatomic) UIPopoverController* popover;
如果您不使用 ARC,请创建 retain
一个:
@property (retain, nonatomic) UIPopoverController* popover;
在第一种情况下,您必须这样做,因为如果没有,ARC 将在您的 IBAction 结束时为您释放刚刚创建的弹出框。此外,您这样做是为了为您的弹出框提供参考。见说明。如果您不使用 ARC,这也是有效的。
注意 在某些时候,您可能需要释放弹出框。例如在- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
做
self.popover = nil;
然后,如果您的 SecondView
是 UIViewController
,则将其称为 SecondViewController
。但这是一个简单的命名建议。
最后,从动作发送者(例如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];
【讨论】:
【参考方案2】:-(IBAction)showpop:(id)sender
UIPopoverController *pop = [[UIPopoverController alloc]initWithContentViewController:popoverview];
[pop setDelegate:self];
[pop presentPopoverFromRect:popbutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
【讨论】:
【参考方案3】:您传递给UIPopOverController
的SecondView 是UIView
。将其设为UIViewController
,因为UIPopOverController
期望的是UIViewController
。
-苏拉杰
【讨论】:
【参考方案4】:确保您在 iPad 设备上进行模拟
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
// We are using an iPhone
UIActionSheet *alertSheet = [[UIActionSheet alloc] initWithTitle:@"Where do you want to get your daily image?" delegate:(self) cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera", @"Library", nil];
[alertSheet setTag:0];
[alertSheet setDelegate:self];
[alertSheet showFromTabBar:[[self tabBarController] tabBar]];
[alertSheet release];
else
// We are using an iPad
/// here you should pass UIViewController inside the popover
/// follow @flexaddicted notes to implement the popover
【讨论】:
【参考方案5】:查看下面的链接以获取 ios 中的弹出框教程
UIPopOverController Tutorial
【讨论】:
你能否在答案中添加一些链接的要点 教程中也有源代码,但上传到 G 盘不是要点 :)以上是关于创建一个 UIPopoverController的主要内容,如果未能解决你的问题,请参考以下文章