打开 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 中的导航栏看起来很难看