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

1行で宣言して割り当てる代わりに、2行に分割します。例えば

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 に答える