Pregunta

Tengo una matriz de cadenas que quiero usar en los títulos de botón en un UIActionSheet. Por desgracia, los otherButtonTitles: argumento de la invocación del método toma una lista de longitud variable de cadenas, no un array

.

Entonces, ¿cómo me puedo pasar estos títulos en el UIActionSheet? La solución que he visto sugerido es pasar nula en otherButtonTitles :, a continuación, especifique los títulos de botón de forma individual mediante el uso de addButtonWithTitle :. Pero esto tiene el problema de mover el botón "Cancelar" para la primera posición en la UIActionSheet en lugar de la última; Yo quiero que sea el último.

¿Hay una manera de 1) pasar una matriz en lugar de una lista de variables de cadenas, o alternativamente 2) mover el botón de cancelación de la parte inferior de la UIActionSheet?

Gracias.

¿Fue útil?

Solución

Tengo esto al trabajo (sólo tiene que, estar bien con un botón regular, y sólo tiene que añadir después:

NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"];

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    // ObjC Fast Enumeration
    for (NSString *title in array) {
        [actionSheet addButtonWithTitle:title];
    }

    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];

    [actionSheet showInView:self.view];

Otros consejos

Una pequeña nota: [actionSheet addButtonWithTitle:] devuelve el índice de ese botón, por lo que es seguro y "limpia" se puede hacer esto:

actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];

Teniendo respuestas de Jaba y Nick de ellos y que se extiende un poco más allá. Para incorporar un botón de destrucción en esta solución:

// Create action sheet
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title
                                                         delegate:self
                                                cancelButtonTitle:nil
                                           destructiveButtonTitle:nil
                                                otherButtonTitles:nil];
// Action Buttons
for (NSString *actionName in actionNames){
    [actionSheet addButtonWithTitle: actionName];
}

// Destruction Button
if (destructiveName.length > 0){
    [actionSheet setDestructiveButtonIndex:[actionSheet addButtonWithTitle: destructiveName]];
}

// Cancel Button
[actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle:@"Cancel"]];

// Present Action Sheet
[actionSheet showInView: self.view];

No es la versión rápida de la respuesta:

//array with button titles
private var values = ["Value 1", "Value 2", "Value 3"]

//create action sheet
let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
//for each value in array
for value in values{
    //add a button
    actionSheet.addButtonWithTitle(value as String)
}
//display action sheet
actionSheet.showInView(self.view)

Para obtener el valor seleccionado, añadir a su delegado ViewController:

class MyViewController: UIViewController, UIActionSheetDelegate

y poner en práctica el método "clickedButtonAtIndex"

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
    let selectedValue : String = values[buttonIndex]
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top