UIActionSheetに関するAppleのドキュメントは、私を混乱させています。まず、iPadヒューマンインターフェイスガイドラインでは、次のように述べています。
コードでアクションシートを使用する方法の詳細については、 『iPadプログラミングガイド』の「ポップオーバーを使用したコンテンツの表示」を参照してください。
ただし、「ポップオーバーを使用したコンテンツの表示」セクションでは、アクションシートについてはまったく触れられていません。ここで何かが足りませんか?
私の主な質問はこれです: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ではなく、アラートを使用することになるかもしれませんが、それでもこれを理解しておくと役に立ちます。
ありがとう!
まず、UIActionSheet
はUIPopoverController
の前に存在しました。UIPopoverController
はiPhoneで利用できないため、下位互換性やユニバーサルアプリに役立ちます。
また、UIActionSheet
は必ずしもポップオーバーに表示されるとは限りません。特に、すでにポップオーバー内にあるUIBarButtonItem
またはUIToolbar
から表示する場合はそうです。次に、iPhoneと同様の方法で表示されます(ビューコントローラーの下部からスライドします)。 HIGによると、同時に複数のポップオーバーを提示してはなりません(以前はアプリが拒否されていました)。そのため、ビューコントローラーがポップオーバー内にある場合(標準の分割ビューアプリのように)、可能であれば、アクションシートを使用したい。もちろん、ポップオーバーはボタンとタイトルのリストしか表示されないのに対し、ポップオーバーは任意のビューコントローラを表示できるため、ポップオーバーをアクションシートに置き換えることができない場合が多くあります。
animated
パラメータは、アクションシートが(iPhoneのように)「クラシック」な方法で提示された場合にのみ効果があると思います。