アクションシートを開くUIBarButtonItemを使用して、ユーザーが何をすべきかを選択できるようにします。 「キャンセル」ボタンをクリックしない限り、すべてが期待どおりに機能します。ボタンのターゲットは、本来あるべき位置から上に移動したように見えます。 「キャンセル」ボタンと「OK」ボタンの中央のどこかをクリックすることでのみ有効にできます。
私は他のアプリケーションのアクションシートで試しましたが、それらはうまく動作するので、それは私の大きな親指ではありません。アクションシートはUIViewControllerで開いています
- (void)showOpenOptions
{
UIActionSheet *sheet = [[UIActionSheet alloc]
initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
otherButtonTitles:nil];
[sheet showInView:self.view];
[sheet release];
}
現在のView Controllerのビューをアクションシートに渡す代わりに、UIActionSheet
のshowFromTabBar:
メソッドを使用します。
正しい方法
これにより、正しいタップ可能領域が得られます。
[actionSheet showFromTabBar:self.tabBarController.tabBar];
間違った方法
これにより、タップ可能な領域が間違った場所に配置されます(タブバーまたはツールバーを使用している場合)。
[actionSheet showInView:self.view];
ツールバーを使用している場合、代わりにshowFromToolbar:
メソッドを使用してください。ツールバーへの参照、ほとんどの場合ivarが必要です。
[actionSheet showFromToolbar:self.myToolbar];
私の古い回答動作しますが、ハッキーです:
ちょうど可能な答えを見つけました:
01-Dec-2008 10:22 PM Tom Saxton:このバグについてもう少し調べたところ、タブバーに問題があるようです。
UITabViewControllerの子であるView ControllerからUIActionSheetの[sheet showInView:self.view]を呼び出すと、キャンセルボタンのヒットテストは、タブバーのビューの上にあるUIActionSheetの部分で失敗します。
代わりにUITabBarControllerのビューを渡すと、UIActionSheetは期待どおりに動作します。
注:iPhone OS 2.1以前では、子ビューを渡すとUIActionSheetがタブバーの上部から表示されていましたが、2.2では、タブバーの下部から表示され、タブビューを覆っています。
http://openradar.appspot.com/641078
編集:ビューをタブバーのビューに変更すると正しく動作します
[sheet showInView:self.parentViewController.tabBarController.view];
here で答えが見つかりました。
使用:[filterActionSheet showInView:[self.view window]]
;
私はタブバーに到達するためにいくつかの方法を試しましたが、このアプリが設定されている方法は複雑です...
代わりに使用します:
[sheet showFromTabBar:theTabBar];
修正方法は次のとおりです:
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
これを処理する正しい方法は、3つの答えを組み合わせることです。
[actionSheet showFromTabBar:self.tabBarController.tabBar];
つまり、showFromTabBarを使用し(存在する理由です)、Nathanが指摘したようにparentViewControllerは必要ありません(実際、self.parentViewController.tabBarController.tabBarはnilを返します)。
参考までに、UIDocumentInteractionControllerのアクションシートがタブバーを踏むのと同じ問題がありました。以下を使用して修正しました。
UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];