创建一个 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;

然后,如果您的 SecondViewUIViewController,则将其称为 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的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个按钮来创建另一个按钮并立即显示

用oracle创建一个表

Java如何创建一个类?

ORACLE 创建一个表

我正在使用 Python 创建一个 lambda 以在 s3 存储桶中创建一个文件,但它只创建一行。需要基于迭代的创建

Java 如何创建一个String