2010-12-19 5 views
4

Ich sehe ein verändertes Verhalten in iOS 4.2 mit UIActionSheet. Ich kann nichts in Apples Entwicklerdokumenten oder Foren darüber finden, daher bin ich mir nicht sicher, wie ich es lösen soll.UIActionSheet lange Liste Verhalten in 4.2 geändert?

In meiner Liste App, ich präsentiere den Benutzer mit einem Aktionsblatt, aus dem sie die Liste auswählen kann, die sie beim Start geladen werden soll. Offensichtlich bedeutet dies, dass es eine variable Anzahl von Elementen geben wird, und das Steuerelement behandelt es gut. Bis etwa 7 Elemente werden alle Elemente als Schaltflächen angezeigt. Sobald dieser Schwellenwert überschritten ist, werden die Elemente in eine Bildlaufansicht zur Auswahl gestellt. Bis 4.2 enthielt es die Abbrechen-Schaltfläche in dieser Bildlaufliste. In 4.2 scheint es nun, das Cancel-Steuerelement zu trennen und es als eine Schaltfläche zu belassen, während der Rest der Elemente in die Bildlaufansicht eingefügt wird. Das Problem besteht darin, dass das Element "Abbrechen" in der Liste der Schaltflächenindizes angezeigt wird. Wenn ich buttonTitleAtIndex: buttonIndex entweder in clickedButtonAtIndex: oder didDismissWithButtonIndex: überprüfe, gibt das erste Element "Cancel" zurück, und die anderen Elementtitel lauten aus mit 1. Durch Klicken auf die Schaltfläche Abbrechen wird auch "Abbrechen" zurückgegeben.

Wer hat das noch erlebt und hat einen Vorschlag, wie man damit umgeht? Auch dies funktionierte in 3.0, 3.1, 4.0 und 4.1.

Hier ist der entsprechende Code Ich verwende:

- (IBAction)popupDefaultListActionSheet { 
    UIActionSheet *popup = [[UIActionSheet alloc] 
     initWithTitle:nil 
     delegate:self 
     cancelButtonTitle:@"Cancel" 
     destructiveButtonTitle:nil 
     otherButtonTitles:nil]; 
    for (List *l in allActiveLists) { // allActiveLists defined elsewhere 
    [popup addButtonWithTitle:[l label]]; 
    } 
    popup.actionSheetStyle = UIActionSheetStyleBlackOpaque; 
    popup.tag = 23; 
    [popup becomeFirstResponder]; 
    [popup showInView:[self.view.window.subviews objectAtIndex:0]]; 
    [popup release]; 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex { 

    DLOG(@"AppSettingsVC.actionSheet didDismissWithButtonIndex: %d", buttonIndex); 
    NSString *defaultListName = [actionSheet buttonTitleAtIndex:buttonIndex]; 
    DLOG(@"chosen default list was: %@", defaultListName); 
} 
+0

Ich habe vergessen zu erwähnen, es scheint in Ordnung zu sein, wenn die anderenButtonTitles in Zeile zur Verfügung gestellt werden. Also muss es etwas mit addButtonWithTitle sein: funktioniert. –

Antwort

3

Versuchen Sie, die Schaltfläche Abbrechen Hinzufügen zunächst dynamisch am Ende anstatt es der Einrichtung:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"My Action Sheet" 
                 delegate:self 
               cancelButtonTitle:nil 
              destructiveButtonTitle:nil 
               otherButtonTitles:nil]; 

for (I32 i = 0; i < itemCount; i++) { 
    [actionSheet addButtonWithTitle:itemText]; 
} 

[actionSheet addButtonWithTitle:@"Cancel"]; 
[actionSheet setCancelButtonIndex:itemCount]; 

scheint in iOS korrekt funktioniert 4.2 zumindest für uns.

+0

Danke, das ist es! Ich denke, 4.2 will jetzt alles oder nichts für das dynamische Hinzufügen von Schaltflächen? –