MonoTouch - 如何仅在使用iPad设备时声明UIPopoverController?

时间:2012-10-02 21:11:06

标签: iphone ipad xamarin.ios uipopovercontroller public

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

  

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

所以我有一个我正在尝试的通用monotouch应用程序,我想在用户使用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在公共部分类中,以便我可以在其他地方公开访问它。

2 个答案:

答案 0 :(得分:1)

不是在一行中声明和分配,而是将它分成两行。 E.g。

UIPopoverController DetailViewPopover = null;

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

如果DetailViewPopover是(公共)字段而不是实例变量,那也是有效的,只要不调用UIPopoverController构造函数,就不会出现错误。< / p>

答案 1 :(得分: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];
         }
     }
希望这会对你有所帮助。快乐的编码!!!