iphone uialertview uiactionsheet

iphone - Cree UIActionSheet ''otherButtons'' pasando en matriz, no varlist



uialertview (4)

Tengo una serie de cadenas que quiero usar para títulos de botones en una Hoja UIAction. Desafortunadamente, el argumento otherButtonTitles: en la invocación del método toma una lista de longitud variable de cadenas, no una matriz.

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

¿Hay alguna manera de 1) pasar una matriz en lugar de una lista variable de cadenas, o alternativamente 2) mover el botón cancelar al final de la Hoja UIAction?

Gracias.


Existe la versión rápida para 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, agregue delegar a su ViewController:

class MyViewController: UIViewController, UIActionSheetDelegate

E implemente el método "clickedButtonAtIndex"

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) { let selectedValue : String = values[buttonIndex] }


Lo hice funcionar (solo necesitas hacerlo, estar bien con un botón normal, y simplemente agregarlo después de:

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


Tomando las respuestas de Jaba y Nick y ampliándolas un poco más. 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];


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

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