【问题标题】:Code to open a UIPopoverController打开 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];





 }

【问题讨论】:

    标签: objective-c xcode uiviewcontroller uipopovercontroller


    【解决方案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 实例的实例变量是什么意思?
    • 你能给我它的代码吗,因为我不明白你的意思。更不用说如何实现这一目标了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多