2012-03-17 59 views
4

我在Xcode 4.3中创建了一个弹出窗口。 我没有得到任何错误消息,但是当我点击构建并运行,我按是应该打开酥料饼的屏幕按钮,应用程序崩溃和绿线的亮点在我的代码,并说:创建UIPopoverController

线程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)]; 
} 

在此先感谢。这里

回答

16

一些建议......

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

@property (strong, nonatomic) UIPopoverController* popover; 

,如果你不使用ARC创建retain之一:

@property (retain, nonatomic) UIPopoverController* popover; 

在你有,因为如果不这样做的第一种情况下,ARC将发布您刚才创建的酥料饼在你的IBAction结束时。另外你可以这样做,为你的popover提供一个参考。看注释。如果您不使用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]; 
} 
3

您传递到UIPopOverController的SecondView是UIView 。使其成为UIViewController,因为,UIPopOverController预计是UIViewController

-Suraj

2

确保你的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 
} 
4
-(IBAction)showpop:(id)sender 
{ 
UIPopoverController *pop = [[UIPopoverController alloc]initWithContentViewController:popoverview]; 
[pop setDelegate:self]; 
[pop presentPopoverFromRect:popbutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

} 
0

检查下面链接,在IOS酥料饼教程

UIPopOverController Tutorial

+0

可以还添加了一些要点在回答 – 2015-11-18 10:04:22

+0

源代码中的链接也存在于导师ial但上传到G驱动器不上gist :) – 2015-11-19 05:08:57