objective actionsheet iphone objective-c

iphone - actionsheet - uialertcontroller swift 4



iPhone SDK-UIActionSheet-Títulos de botones dinámicos (4)

La forma más fácil de hacer esto que he encontrado es crear inicialmente su hoja de acción sin botones, incluido el botón sin cancelar o destructivo:

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

Luego agregue una carga de botones según sea necesario:

if(buttonX) { [actionSheet addButtonWithTitle:@"Button X"]; } if(buttonY) { [actionSheet addButtonWithTitle:@"Button Y"]; } if(buttonZ) { [actionSheet addButtonWithTitle:@"Button Z"]; }

Finalmente, finalmente agregue el botón de cancelar al final y establezca el índice del botón de cancelar:

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

Por supuesto, puede agregar un botón de cancelación y / o un botón destructivo de esta manera.

Tengo un requisito en una aplicación en la que necesito poder agregar otros Títulos de Botones dinámicamente, dependiendo de algunos conmutadores BOOL que un usuario haya especificado en la configuración. Sin embargo, parece que no puedo encontrar la manera de hacer esto en la inicialización de UIActionSheet. He intentado pasar una matriz NSString (NSString [2]), y también una NSArray sin suerte.

Cualquier ayuda aquí es muy apreciada.


Puede agregar nuevos botones al método UIActionSheet (ya inicializado) con el método addButtonWithTitle addButtonWithTitle: También puede crear sus UIButtons personalizados y agregarlos a la vista UIActionSheet como subvistas.


Si necesita tantos botones, cree su propia vista modal y su propio protocolo de delegado.

Revise la documentación para presentModalViewController:animated y dismissModalViewController:animated:

Cuando el usuario cierra su vista modal, su delegado puede recibir un método que usted construye, algo como customActionSheetDidFinish:(int)buttonChosen


Terminé resolviendo esto usando algunas cadenas nulas y una matriz. Coloco los títulos dinámicos que necesito en una matriz, luego los recorro y coloco las cadenas del marcador de posición con tantos títulos como sea necesario. Las cadenas de marcador de posición se pasan a otherButtonTitles: en la inicialización de la hoja de acción. Al ser otherButtonTitles: termina con nil, puede pasar tantas cadenas de marcadores de posición como sea necesario, ya que el primer marcador de posición nil terminará el resto.

// button titles NSMutableArray *buttons = [[NSMutableArray alloc] init]; [buttons addObject:@"Button 1"]; [buttons addObject:@"Button 2"]; // placeholders NSString *button0 = nil, *button1 = nil, *button2 = nil; // put together the buttons for (int x = 0; x < buttons.count; x++) { switch (x) { case 0: button0 = [buttons objectAtIndex:x]; break; case 1: button1 = [buttons objectAtIndex:x]; break; case 2: button2 = [buttons objectAtIndex:x]; break; } } // action sheet UIActionSheet *option = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:button0, button1, button2, nil];

Espero que esto sea útil para otros que enfrentan un dilema similar.