web-dev-qa-db-ja.com

iPadでUIActionSheetを使用する

UIActionSheetに関するAppleのドキュメントは、私を混乱させています。まず、iPadヒューマンインターフェイスガイドラインでは、次のように述べています。

コードでアクションシートを使用する方法の詳細については、 『iPadプログラミングガイド』の「ポップオーバーを使用したコンテンツの表示」を参照してください。

ただし、「ポップオーバーを使用したコンテンツの表示」セクションでは、アクションシートについてはまったく触れられていません。ここで何かが足りませんか?

http://developer.Apple.com/library/ios/#documentation/General/Conceptual/iPadHIG/UIElements/UIElements.html#//Apple_ref/doc/uid/TP40009446-CH6-SW9

私の主な質問はこれです:iPadでは、UIPopoverControllerとUIActionSheetの違いは何ですか? UIActionSheetが自動的にUIPopoverController内に表示される場合、UIActionSheetを使用する理由はありますか?デリゲートとボタンの自動作成によってコード行が少なくなることはわかりますが、ユーザビリティPOVからは違いがありますか?

また、actionSheetをアニメーションで表示してもまったく機能しません。アニメーションなしで表示されるactionSheetとまったく同じように見え、動作します(これは、UIPopoverControllerを使用していて、actionSheetをまったく使用していない場合とまったく同じです)。これが私のコードです:

UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"An unsaved property already exists. You must assign a name to this property before creating a new property. Would you like to:"
    delegate:self
    cancelButtonTitle:nil
    destructiveButtonTitle:@"Overwrite"
    otherButtonTitles:@"Open unsaved property", nil];

[action showFromRect:CGRectMake(0, 0, 200, 200) inView:self.mainSplitViewController.view animated:NO];

AppleのドキュメントにあるアニメーションのactionSheetのサンプルのようなactionSheetを取得するにはどうすればよいですか(連絡先に場所を追加するマップアプリケーションから)?

ポップオーバーやactionSheetではなく、アラートを使用することになるかもしれませんが、それでもこれを理解しておくと役に立ちます。

ありがとう!

18
GendoIkari

まず、UIActionSheetUIPopoverControllerの前に存在しました。UIPopoverControllerはiPhoneで利用できないため、下位互換性やユニバーサルアプリに役立ちます。

また、UIActionSheetは必ずしもポップオーバーに表示されるとは限りません。特に、すでにポップオーバー内にあるUIBarButtonItemまたはUIToolbarから表示する場合はそうです。次に、iPhoneと同様の方法で表示されます(ビューコントローラーの下部からスライドします)。 HIGによると、同時に複数のポップオーバーを提示してはなりません(以前はアプリが拒否されていました)。そのため、ビューコントローラーがポップオーバー内にある場合(標準の分割ビューアプリのように)、可能であれば、アクションシートを使用したい。もちろん、ポップオーバーはボタンとタイトルのリストしか表示されないのに対し、ポップオーバーは任意のビューコントローラを表示できるため、ポップオーバーをアクションシートに置き換えることができない場合が多くあります。

animatedパラメータは、アクションシートが(iPhoneのように)「クラシック」な方法で提示された場合にのみ効果があると思います。

23
omz