2012-10-02 14 views
1

正如我從閱讀文檔中瞭解到的,UIPopoverControllers僅在iPad上受支持。當UIUserInterfaceIdiomPad下MonoTouch - 如何僅在使用iPad設備時聲明UIPopoverController?

沒有運行]叫:因此,如果您嘗試聲明一個變量作爲UIPopoverController並運行在iPhone模擬器或iPhone上的應用程序,你會得到一個錯誤,如:

UIPopoverController initWithContentViewController

所以我有一個通用的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()); 
} 

如何我只聲明:如果設備是一臺iPad

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

一部分?我需要UIPopoverController在公共部分類中,以便我可以在其他地方公開訪問它。

回答

1

而不是在一行中聲明和分配只是將它分成兩行。例如。

UIPopoverController DetailViewPopover = null; 

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

這也將如果DetailViewPopover工作是(公共)字段,而不是一個實例變量和,只要不調用構造函數UIPopoverController,你不會得到錯誤。

+0

謝謝@poupou!我明白了,所以聲明它爲null意味着iPhone仍然會枚舉這些代碼,但是因爲它是空的,所以這個語句沒有問題?然後,我會爲iPad設備指定代碼並在需要時爲其指定值。這測試後效果很好:) – Shogan

+0

是的,Apple在'init'(爲MonoTouch映射到構造函數中)執行了設備檢查。所以只需要有變量,未指定,就可以了(對於iPhone)。 – poupou

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]; 
     } 
    } 

希望這會幫助你。快樂編碼!

+0

嗨@ surya-kant感謝您的回覆,但我很清楚確定設備類型,然後聲明變量。但是,在IF語句中聲明我的PopOverController意味着它只能在此IF語句中使用。我需要在公共層面聲明它,但是我不能在這個領域使用IF語句。另外,我正在使用C#(MonoTouch!) – Shogan