23

iPhoneでは、次のコードはキャンセルボタンを示しています。

- (IBAction)buttonPressed
{
    UIActionSheet *actionSheet = [[UIActionSheet alloc]
                                  initWithTitle:@"Are you sure?"
                                  delegate:self 
                                  cancelButtonTitle:@"No way!"
                                  destructiveButtonTitle:@"Yes, I'm sure!"
                                  otherButtonTitles:nil];
    [actionSheet showInView:self.view];
    [actionSheet release];  
}

しかし、iPadでは、破壊的なボタンだけが表示されます。
どうしたの?

4

6 に答える 6

42

これはUI デザインとガイドラインの一部です。「アクション シート」の下に、次のように書かれています。

キャンセル ボタンを含めないでください。ユーザーはポップオーバーの外側をタップして、他の選択肢を選択せず​​にアクション シートを閉じることができるからです。

SDK が意図的にボタンを非表示にしているようです。解決策があるかどうかはわかりませんが、独自のボタンを追加して、cancelButtonIndex一致するように設定できるかもしれません。または、 に切り替えることもできますUIAlertView

于 2010-05-03T19:41:55.220 に答える
4

iOS 5 では、これでうまくいきました。

- (void)manualAddModel
{
    UIActionSheet *popupQuery = [[UIActionSheet alloc] initWithTitle: @"Select Equipment Type"
                                                            delegate: self
                                                   cancelButtonTitle: @"Cancel"
                                              destructiveButtonTitle: nil
                                                   otherButtonTitles: @"Add Boiler", @"Add Furnace",  nil];

    popupQuery.actionSheetStyle = UIActionSheetStyleDefault;
    [popupQuery addButtonWithTitle:@"Cancel"];
    [popupQuery showInView:self.view];
}


- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSLog(@"Add Boiler");
    }
    else if (buttonIndex == 1)
    {
        NSLog(@"Add Furnace");
    }
    else if (buttonIndex == 2)
    {
        NSLog(@"Cancel Button Clicked");
    }
}

通常、アクションシートの外側をタップすると、iPad で同じ目的が果たされます。

于 2011-11-12T10:37:28.137 に答える
2

iOS 4.2.1 では、通常のボタンのように独自のキャンセル ボタンを手動で追加できるようです。

[actionSheet addButtonWithTitle:@"Cancel"];

そして、次のように設定します。

actionSheet.cancelButtonIndex = <your index>;

赤のキャンセル ボタンは表示されませんが、UIActionSheetStyle設定に応じて青または黒のいずれかが表示されます。いずれにせよ、通常のボタンとはかなり明確に区別され、正しくキャンセルされます。

私の場合、ポップオーバー コントローラー内からアクション シートを表示していますが、他のシナリオでは結果が異なる場合があることに注意してください。

于 2011-01-07T08:42:42.913 に答える
1

別のモーダル ビューの下にあるビューに ActionSheet を表示しようとしたときに、同じ問題が発生しました。たとえば、ビューが非表示でした。ビューは nil ではありませんでしたが、フレームワークが深いように見えますが、表示されていない場合はそうです。

UIModalPresentationStyle modalPresentationStyleビューが表示されるように別のプロパティを設定することで問題を解決しました。

view.modalPresentationStyle = UIModalPresentationFormSheet;
于 2011-11-24T13:39:39.157 に答える
1

actionSheetStyle を設定することでこれを解決できました。

actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

UIActionSheetStyleBlackTranslucent も機能します。ガイドラインが言うように技術的には「ポップオーバーコントローラー」ではないと思われるモーダルビューコントローラーからアクションシートを表示していますが、アクションシートのキャンセルボタンがモーダルビューの上に表示されたときに正しく見えません。ユーザーに表示されるのは、目に見える代替手段のない恐ろしい赤いボタン 1 つだけです。

モーダル ビュー コントローラを popovercontroller に変更できるかもしれませんが、必要なモーダルにはなりません。

- アップデート -

それが続いている間は楽しかったのですが、これは iOS 4.2 では機能しなくなりました。
UIActionSheet の代わりに UIAlertView を使用するように切り替えました。
クールな赤いボタンはもうありませんが、仕事は完了します。

于 2010-05-03T20:28:32.177 に答える
1

UIActionSheet は、ActionSheet 領域外の任意の場所をタップするだけでキャンセル (非表示) できるため、iPad で表示した場合、iOS 標準では UIActionSheet に [キャンセル] ボタンは表示されません。iPhone の場合、UIActionSheet にはキャンセル ボタンが含まれます。

詳細については、このリンクを参照してください。 iPad の UIActionSheet キャンセル ボタン

于 2013-11-13T15:05:10.393 に答える