1

据我阅读文档了解到,UIPopoverControllers 仅在 iPad 上受支持。因此,如果您尝试将变量声明为 UIPopoverController 并在 iPhone 模拟器或 iPhone 上运行应用程序,则会收到如下错误:

UIPopoverController initWithContentViewController:] 未在 UIUserInterfaceIdiomPad 下运行时调用

所以我有一个我正在尝试的通用单点触控应用程序,当用户使用 iPad 时,我想在其中使用 UIPopoverController,对于 iPhone,我有另一个解决方案。

这就是我目前声明它的方式,但显然在 iPhone 上运行不起作用,并且我收到上述错误消息。

public partial class IOPSCalculatorViewController : UIViewController
{

    static bool UserInterfaceIdiomIsPhone {
        get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; }
    }

    static bool UserInterfaceIdiomIsIPAD {
        get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad; }
    }

    UIPopoverController DetailViewPopover = new UIPopoverController(new PopoverContentViewController());
}

我怎样才能只声明:

UIPopoverController DetailViewPopover = new UIPopoverController(new PopoverContentViewController());

如果设备是 iPad 的一部分?我需要 UIPopoverController 位于公共部分类中,以便我可以在其他地方公开访问它。

4

2 回答 2

1

与其在一行中声明和分配,不如将其拆分为两行。例如

UIPopoverController DetailViewPopover = null;

if (IOPSCalculatorViewController.UserInterfaceIdiomIsIPAD) {
    DetailViewPopover = new UIPopoverController (new PopoverContentViewController ());
}

如果DetailViewPopover是(公共)字段而不是实例变量,这也将起作用,并且只要UIPopoverController不调用构造函数,您就不会收到错误消息。

于 2012-10-02T23:18:01.130 回答
0

您需要找出您当前的设备是什么,并为 iphone 和 iPad 编写代码。这是我在我的案例中使用的一段代码。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
     {
        //Do your coding here
     }
     else {
         if(![popoverController isPopoverVisible]){
             contact = [[[ContactViewController alloc] initWithNibName:@"ContactViewController_iPad" bundle:nil] autorelease];
             popoverController = [[[UIPopoverController alloc] initWithContentViewController:contact] retain];
             [popoverController setPopoverContentSize:CGSizeMake(400.0f, 400.0f)];
             [popoverController presentPopoverFromRect:CGRectMake(230, 860, 320.0f, 320.0f) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
             [popoverController release];
         }else{
             [popoverController dismissPopoverAnimated:YES];
         }
     }

希望这会帮助你。快乐编码!!!

于 2012-10-02T21:38:41.460 回答