2010-12-05 18 views
5

¿Hay alguna forma de tener más de 1 "botón destructivo" rojo en la UIActionSheet de una aplicación para iPhone?Múltiples botones rojos/destructivos UIActionSheet

Necesito tener diferentes opciones claras, en la misma hoja de acción, una donde se elimina todo y otra donde se elimina menos, por lo que ambas deben ser rojas.

+2

En lugar de tratar de modificar UIActionSheet, me gustaría reflexionar sobre el diseño de la interfaz aquí. Tener más de una opción destructiva en una lista es confuso y va en contra de los estándares de la plataforma. Tal vez podría hacer que sus acciones de limpieza se puedan deshacer fácilmente, haciéndolas no destructivas. –

+0

Es un botón de historial claro, por lo que no debe deshacerse. Supongo que podría tener una hoja de acción con las 2 opciones como no destructivas y luego pedir confirmación con otra hoja de acción con un botón destructivo. Pero no es como si el usuario estuviera restableciendo el teléfono. –

Respuesta

2

acabo de crear un simple reemplazo personalizable para UIActionSheet para el iPhone para utilizar en una situación similar caso. No usa la apariencia estándar, pero esto puede cambiarse. Probablemente sea de alguna utilidad para ti.

https://github.com/4marcus/WMActionSheet

1

No existe una forma admitida de hacerlo en la UIActionSheet estándar. Se puede construir su propio reemplazo "Hoja de acción" utilizando los botones de gradiente como los que aquí:

http://iphonedevelopment.blogspot.com/2010/05/gradient-buttons-yet-again.html

yo esperaría que alguien ha creado una hoja de reemplazo de la acción Lookalike más personalizable, pero no sé de uno la parte superior de mi cabeza.

0

he intentado esto antes vi griotspeak respuesta actualización:

SEL getTitle = NSSelectorFromString(@"title"); 
SEL getBackground = NSSelectorFromString(@"background"); 
SEL setBackground = NSSelectorFromString(@"setBackgroundImage:"); 
SEL setTitleColor = NSSelectorFromString(@"setTitleColor:"); 
UIImage *redImage; 
UIColor *titleColor; 
UIColor *shadowColor; 
for (NSObject *object in [action subviews]) { 
    if ([[NSString stringWithFormat:@"%@", [object class]] isEqualToString:@"UIThreePartButton"]) { 
     if ([[object performSelector:getTitle] isEqualToString:@"Clear all"]) { 
      redImage = [object performSelector:getBackground]; 
      titleColor = [object performSelector:@selector(titleColor)]; 
      shadowColor = [object performSelector:@selector(shadowColorForState:) withObject:0]; 
      shadowOffset = [object performSelector:@selector(shadowOffset)]; 
     } 
     if ([[object performSelector:getTitle] isEqualToString:@"Clear all except this month"]) { 
      [object performSelector:setBackground withObject:redImage]; 
      [object performSelector:setTitleColor withObject:titleColor]; 
      [object performSelector:@selector(setShadowColor:) withObject:shadowColor]; 
      //[object performSelector:@selector(setShadowOffset:) withObject:CGSizeMake(-2.5,0)]; 
     } 
    } 

} 

(yo uso NSSelectorFromString en lugar de un @selector(), ya que significa que no está realmente usando cosas indocumentados, una especie de, si se obtiene lo que significa)

No está completamente documentado, pero no creo que haya usado métodos no documentados. Básicamente lo que hace es tomar el fondo rojo del fondo destructivo y aplicarlo al otro botón llamado "Cancelar".

Así que, si Apple cambia el color del botón destructivo, también lo hará el cambio no destructivo y destructivo sin necesidad de una actualización. Aunque no utiliza particularmente métodos seguros de Apple.

estoy teniendo un poco de problemas con la línea comentada más arriba, si se puede ayudar por favor respuesta aquí: performSelector:withObject:, but not with an object

+3

No, no hagas esto. Todavía está utilizando métodos no documentados para atornillar con la estructura interna de una vista que Apple no le permite modificar.Incluso si Apple no detecta esto durante el proceso de revisión, se está abriendo a la posibilidad de que esta aplicación se rompa durante cualquier futura actualización del sistema operativo. –

+0

Lógicamente, esto es mejor porque, si Apple lo actualiza, el segundo botón destructivo también se actualizará automáticamente. Si hago mi propia hoja de acción basada en los colores actuales y Apple actualiza la suya, ninguno de los botones se verá correcto. –

+0

Un punto opuesto a ese punto sería que podrían cambiar la estructura de la hoja de acción tan fácilmente como el estilo y luego se rompería. Es el elemento comodín con el que Brad está discutiendo. Pero si funciona ahora, Apple lo aprueba, y no te importa la posibilidad de una actualización rompiéndolo, no es un gran problema. – griotspeak

Cuestiones relacionadas