1. ホーム
  2. ios

[解決済み] UIActionSheetのキャンセルボタンの動作がおかしい

2022-05-16 12:39:24

質問

UIBarButtonItem でアクション シートを開き、ユーザーに何を行うかの選択肢を提供するようにしています。すべてが、"Cancel" ボタンをクリックしようとしない限り、期待どおりに動作します。ボタンのターゲットが、あるべき場所から上に移動しているように見えます。私は、"Cancel" と "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];
}

どのように解決するのですか?

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

正しい方法

これで、正しいタップ可能領域が得られます。

[actionSheet showFromTabBar:self.tabBarController.tabBar];

間違った方法

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

[actionSheet showInView:self.view];

ツールバーを使っている場合 を使用します。 showFromToolbar: メソッドを使います。ツールバーへの参照が必要です。

[actionSheet showFromToolbar:self.myToolbar];


昔の回答 また、動作しますが、ハッキーです。

ちょうど可能な答えを見つけました。

01-Dec-2008 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];