Cuando llamo a setTitle en un UIButton, el botón parpadea en iOS 7. Intenté configurar myButton.highlights = NO, pero eso no impidió que el botón parpadeara.
[myButton setTitle:[[NSUserDefaults standardUserDefaults] stringForKey:@"elapsedLabelKey"] forState:UIControlStateNormal];
myButton.highlighted = NO;
Así es como configuro el temporizador que actualizó los títulos:
- (void)actionTimer {
if (myTimer == nil) {
myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0
target: self
selector: @selector(showActivity)
userInfo: nil
repeats: YES];
}
}
Este es el método que realmente actualiza los títulos:
- (void)showActivity {
NSString *sym = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];
if (pauseInterval == nil) {
// Update clock
seconds = [[NSDate date] timeIntervalSinceDate:startInterval] - breakTime;
// Update total earned
secRate = rate.value / 60 / 60;
total = secRate * seconds;
[totalLabel setTitle:[NSString stringWithFormat:@"%@%.4f",sym,total] forState:UIControlStateNormal];
days = seconds / (60 * 60 * 24);
seconds -= days * (60 * 60 * 24);
int hours = seconds / (60 * 60);
fhours = (float)seconds / (60.0 * 60.0);
seconds -= hours * (60 * 60);
int minutes = seconds / 60;
seconds -= minutes * 60;
// Update the timer clock
[elapsed setTitle:[NSString stringWithFormat:@"%.2i:%.2i:%.2i:%.2i",days,hours,minutes,seconds] forState:UIControlStateNormal];
}
}
Respuestas:
Establezca el tipo de botón en UIButtonTypeCustom y dejará de parpadear
fuente
Un enfoque mejor que el
[UIView setAnimationsEnabled:NO]
que puede afectar a otras animaciones es deshabilitar solo la animación del título específico.C objetivo:
Rápido:
fuente
* Tenga en cuenta *
cuando " buttonType " de _button es "UIButtonTypeSystem" , el código siguiente no es válido :
cuando " buttonType " de _button es "UIButtonTypeCustom" , el código anterior es válido .
fuente
Vea las respuestas de ¿Cómo detener la animación UIButton no deseada en el cambio de título? :
fuente
layoutIfNeeded
:[elapsed layoutIfNeeded];
. Esto eliminó el parpadeo en mi caso.layoutIfNeeded
, parece estar funcionandoSimplemente puede crear otra función para UIButton para facilitar el uso futuro.
¡Eso es!
Y simplemente establezca el título como lo haría antes, pero reemplácelo
setTitle
consetTitleWithoutAnimation
fuente
¡El comportamiento predeterminado de "setTitle" es definitivamente odioso!
Mi solucion es:
Además, en el guión gráfico, en la propiedad del botón desmarco:
Y comprobar:
Probado y funcionando también en iOS 8 .
Actualización - Swift
Le sugiero que cree su botón personalizado y anule el método setTitle .
fuente
Pruebe esto, esto funciona en las versiones más recientes de IOS:
fuente
Soy nuevo en codificación y Stackoverflow, así que no tengo suficiente reputación para comentar directamente para expandir https://stackoverflow.com/users/4673064/daniel-tseng excelente respuesta. Entonces tengo que escribir mi propia respuesta nueva, y es esta:
Funciona muy bien, EXCEPTO:
Si todas mis llamadas más adelante en el código a "setTitleWithoutAnimation" no especifican un remitente, entonces recibo estos mensajes extraños relacionados con CoreMedia o CoreData, por ejemplo, "No se pudieron heredar los permisos de CoreMedia de 2526: (nulo)"
Esto es probablemente bastante básico para la codificación y iOS, pero para mí, como nuevo codificador, me envió por un camino de conejo por un tiempo, como en: Today Extension No se pudieron heredar los permisos de CoreMedia , donde la gente tenía respuestas interesantes pero eso NO llegar a la raíz de mi problema.
Así que finalmente descubrí que tenía que revisar y dar parámetros a mis funciones sin parámetros, es decir, tenía que especificar un remitente. Ese remitente podría ser UIButton, Any o AnyObject. Todos funcionaron, pero en última instancia parece haber un conflicto entre agregar una extensión de botón con "self" y no decir específicamente más adelante que un botón la está usando.
Nuevamente, probablemente básico, pero nuevo para mí, así que pensé que valdría la pena compartirlo.
fuente
Otro truco
Esto solo funciona si conoce el valor del título sin realizar ninguna llamada a la API. El título del botón se establecerá antes de que se cargue la vista, por lo que no verá la animación.
fuente