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
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. –
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. –