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