打开 UIPopoverController 的代码

Posted

技术标签:

【中文标题】打开 UIPopoverController 的代码【英文标题】:Code to open a UIPopoverController 【发布时间】:2011-05-17 00:06:22 【问题描述】:

我目前有打开 UIViewController 的代码,在这种情况下,您之前已经打开过它,因此它不会完全从头开始加载。因此,当您返回时,旧数据仍然存在。我不会尝试为您下次进入应用程序时保存数据。仅在该会话中。我正在尝试将此代码调整为适用于 UIPopOver 的 iPad。我试过了,但我做不到。

//没有弹出框

  - (IBAction) addPerson:(id) sender
if (addPersonController == nil) 
    addPersonController = [[addPersonViewController alloc] initWithNibName:@"addPersonViewController" bundle:nil];


addPersonController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:addPersonController animated:YES];
[addPersonController retain];
 

//弹出框

  - (IBAction) addPerson:(id) sender
// create your view controller if it doesn't exist yet
if (dateViewPopOverController == nil)
    addPersonViewController1 = [[addPersonViewControllerPopover_iPad alloc] init];

 pop = [[UIPopoverController alloc] initWithContentViewController:addPersonViewController1];

// rest of your method...
addPersonViewController1.delegate = self;

pop.popoverContentSize = CGSizeMake(320, 480);

CGRect rect = CGRectMake(790, 35, 175, 300);


[pop presentPopoverFromRect:rect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];





 

【问题讨论】:

【参考方案1】:

您可以将 dateViewPopOverController 作为实例变量保留在您从中呈现弹出框的视图控制器中。这样,当弹出框被关闭时,您的视图控制器仍然保留显示的 dateViewPopOverController。

在您的 .h 文件中:

@interface YourViewControllerName : UIViewController 

    dateViewPopOverViewController_iPad *dateViewPopOverViewController;
    // other ivars...



@property (nonatomic, retain) dateViewPopOverViewController_iPad *dateViewPopOverViewController;
// other @properties...

在您的 .m 文件中:

合成:

@synthesize dateViewPopoverController;

你的方法:

- (IBAction) selectStartDate:(id) sender 
    NSLog(@"Select start date");

    // create your view controller if it doesn't exist yet
    if (dateViewPopOverController == nil)
        dateViewPopOverViewController =  
            [[dateViewPopOverViewController_iPad alloc] init];

    popover2 = [[UIPopoverController alloc] 
        initWithContentViewController:dateViewPopOverViewController];

    // rest of your method... *but do not release the dateViewPopOverViewController here*


在 dealloc 中释放控制器:

- (void) dealloc 

    [dateViewPopOverViewController release];
    // rest of dealloc...


【讨论】:

由于某种原因第二次崩溃了。 你能发布异常吗? - 我已经编辑了我的答案,注意您应该在您的 selectStartDate 方法中释放 dateViewPopOverController,因为它是一个实例变量 我刚刚更新了我的代码,它是同样的东西,但它不起作用。 如果你能回答那就太好了。非常感谢。 如果您发布的代码正是您所拥有的,那么违规行就在这里:if (dateViewPopOverController == nil) addPersonViewController1 = [[addPersonViewControllerPopover_iPad alloc] init]; replace dateViewPopOverController with addPersonViewController1【参考方案2】:

看起来您只需要一个实例变量来保存您的 dateViewPopOverViewController_iPad 实例。然后使用与非弹出代码中的 DateViewController 相同的“如果它为 nil,则创建一个实例”逻辑。

【讨论】:

保存 dateViewPopOverViewController_iPad 实例的实例变量是什么意思? 你能给我它的代码吗,因为我不明白你的意思。更不用说如何实现这一目标了。谢谢

以上是关于打开 UIPopoverController 的代码的主要内容,如果未能解决你的问题,请参考以下文章

IOS IPAD UIpopovercontroller 需要在同一个进程上关闭和打开

UIPopOverController 旋转时丢失内容

为啥我的 UIPopoverController 会以这种方式弹出?

如果以编程方式创建 UIPopoverController 中的导航栏看起来很难看

UIPopoverController 顶部的 UIBotton 消失

创建一个 UIPopoverController