24 Stimmen

Aktionsblatt zeigt die Schaltfläche Abbrechen auf dem iPad nicht an

Auf dem iPhone zeigt dieser Code die Abbruchtaste an:

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

Auf dem iPad wird jedoch nur die Schaltfläche "Zerstören" angezeigt.
Wo liegt das Problem?

43voto

Colin Gislason Punkte 5249

Dies ist Teil der UI-Entwurf und Leitfäden . Unter "Aktionsblatt" heißt es:

D denn die Leute können außerhalb des Popover tippen, um das Aktionsblatt zu schließen ohne eine der anderen Alternativen auszuwählen Alternativen zu wählen.

Es sieht so aus, als ob die SDK versteckt die Schaltfläche absichtlich für Sie . Ich bin mir nicht sicher, ob es eine Lösung gibt, aber vielleicht könnten Sie Ihre eigene Schaltfläche hinzufügen und die cancelButtonIndex zu entsprechen. Oder Sie wechseln zu UIAlertView .

4voto

appledroid Punkte 79

Unter iOS 5 hat das bei mir funktioniert.

- (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");
    }
}

Normalerweise erfüllt das Tippen außerhalb des Aktionsblatts auf dem iPad denselben Zweck.

2voto

Barry Sohl Punkte 21

Es sieht so aus, als ob Sie in iOS 4.2.1 Ihre eigene Abbrechen-Taste wie eine normale Taste manuell hinzufügen können:

[actionSheet addButtonWithTitle:@"Cancel"];

Und dann einstellen:

actionSheet.cancelButtonIndex = <your index>;

Sie erhalten keine rote Abbruchtaste, sondern eine blaue oder schwarze Taste, je nachdem, welche UIActionSheetStyle Umgebung. Auf jeden Fall ist sie ziemlich deutlich von den normalen Tasten zu unterscheiden und bricht korrekt ab.

Beachten Sie, dass ich in meinem Fall ein Aktionsblatt aus einem Popover-Controller heraus anzeige; Ihre Ergebnisse können in anderen Szenarien abweichen.

1voto

Ich konnte dieses Problem lösen, indem ich den actionSheetStyle einstellte:

actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;

UIActionSheetStyleBlackTranslucent funktioniert ebenfalls. Ich zeige das Aktionsblatt von einem modalen Ansicht-Controller, die ich schätze, ist nicht technisch ein "Popovercontroller" wie die Richtlinien sagen, aber nicht sehen eine Schaltfläche Abbrechen auf dem Aktionsblatt sieht nicht richtig, wenn es oben auf der modalen Ansicht erscheint. Alles, was der Benutzer sieht, ist eine beängstigende rote Schaltfläche ohne sichtbare Alternative.

Vielleicht könnte ich den modalen Viewcontroller in einen Popovercontroller ändern, aber dann wäre es nicht modal, was es sein muss.

-Update--

Nun, es war lustig, solange es dauerte, aber das funktioniert nicht mehr in iOS 4.2.
Ich bin dazu übergegangen, ein UIAlertView statt eines UIActionSheet zu verwenden.
Ich bekomme zwar keinen coolen roten Knopf mehr, aber er erfüllt seinen Zweck.

1voto

Pankin Nikolay Punkte 11

Ich hatte das gleiche Problem, wenn ich versuchte, ActionSheet in der Ansicht zu zeigen, die unter einer anderen modalen Ansicht war, z.B. die Ansicht war unsichtbar. Obwohl die Ansicht war nicht nil sieht aus wie tief im Rahmen bedeutet es so, wenn es nicht angezeigt wird.

Ich habe das Problem gelöst, indem ich eine andere UIModalPresentationStyle modalPresentationStyle Eigenschaft, damit die Ansicht sichtbar wird.

view.modalPresentationStyle = UIModalPresentationFormSheet;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X