Crear UIActionSheet '' otherButtons pasando en ordenanza, no varlist
-
24-09-2019 - |
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.
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]
}