116

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

7 に答える 7

190

現在のビュー コントローラーのビューをアクション シートに渡す代わりに、 のshowFromTabBar:メソッドを使用しUIActionSheetます。

正しい方法
これにより、正しいタップ可能領域が得られます。

[actionSheet showFromTabBar:self.tabBarController.tabBar];

間違った方法
これにより、タップ可能な領域が間違った場所に配置されます (タブ バーまたはツールバーを使用している場合)。

[actionSheet showInView:self.view];

ツールバーを使用している場合は、showFromToolbar:代わりに メソッドを使用してください。ツールバーへの参照が必要です。ほとんどの場合、ivar です。

[actionSheet showFromToolbar:self.myToolbar];

私の古い回答も機能しますが、ハッキーです:

可能な答えが見つかりました:

2008 年 12 月 1 日 10:22 PM Tom Saxton: このバグをもう少し調べたところ、タブバーの問題のようです。

UITabViewController の子であるビュー コントローラーから UIActionSheet の [sheet showInView:self.view] を呼び出すと、キャンセル ボタンのヒット テストは、タブバーのビューの上にある UIActionSheet の部分で失敗します。

代わりに UITabBarController のビューを渡すと、UIActionSheet は期待どおりに動作します。

注: iPhone OS 2.1 以前では、子ビューを渡すと UIActionSheet がタブ バーの上部から表示されていましたが、2.2 ではタブ バーの下部から表示されるため、タブ ビューを覆います。

http://openradar.appspot.com/6410780

編集:ビューをタブバーのビューに変更すると正しく動作します

[sheet showInView:self.parentViewController.tabBarController.view];
于 2009-07-29T02:22:57.300 に答える
37

ここでうまくいく答えを見つけました。

使用: [filterActionSheet showInView:[self.view window]];

タブバーにアクセスする方法をいくつか試しましたが、このアプリの設定方法は複雑に見えます...

于 2009-07-29T02:38:50.237 に答える
22

代わりに次を使用します。

[sheet showFromTabBar:theTabBar];
于 2009-07-29T03:01:50.200 に答える
10

これが修正です。これを試してください:

[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
于 2012-01-09T17:48:26.607 に答える
5

3つの答えの組み合わせがこれを処理する正しい方法だと思います:

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

つまり、showFromTabBar を使用し (それが存在する理由です)、Nathan が指摘したように、parentViewController は必要ありません (実際、self.parentViewController.tabBarController.tabBar は nil を返します。

于 2011-11-24T16:19:53.757 に答える
1

参考までに - UIDocumentInteractionController のアクションシートがタブバーを踏むのと同じ問題がありました。以下を使用して修正しました。

UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];
于 2010-08-27T14:30:48.590 に答える
-2

簡単なコードを書く

 actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

これはうまくいきます

于 2012-07-04T11:26:46.833 に答える