Después de que mi usuario hace clic en un botón, me gustaría que ese botón permaneciera pulsado durante el tiempo que realizo una operación de red. Cuando se complete la operación de red, quiero que el botón vuelva a su estado predeterminado.
Intenté llamar, [UIButton setSelected:YES]
justo después de presionar el botón (con una llamada correspondiente a, [UIButton setSelected:NO]
después de que finalice mi operación de red), pero no parece hacer nada. Lo mismo si llamo setHighlighted:
.
Supongo que podría intentar cambiar la imagen de fondo para indicar un estado seleccionado durante la operación de red, pero eso parece un truco. ¿Alguna sugerencia mejor?
Así es como se ve mi código:
- (IBAction)checkInButtonPushed
{
self.checkInButton.enabled = NO;
self.checkInButton.selected = YES;
self.checkInButton.highlighted = YES;
[self.checkInActivityIndicatorView startAnimating];
[CheckInOperation startWithPlace:self.place delegate:self];
}
- (void)checkInCompletedWithNewFeedItem:(FeedItem*)newFeedItem wasNewPlace:(BOOL)newPlace possibleError:(NSError*)error;
{
[self.checkInActivityIndicatorView stopAnimating];
self.checkInButton.enabled = YES;
self.checkInButton.selected = NO;
self.checkInButton.highlighted = NO;
}
Tengo una forma más fácil. Simplemente use "performSelector" con 0 retraso para realizar
[button setHighlighted:YES]
. Esto volverá a resaltar después de que finalice el ciclo de ejecución actual.fuente
"Todo mejora cuando enciendes"
funciona perfectamente ... después de conectar la salida al botón en Interface Builder.
No necesita setBackgroundImage: forState :, el constructor le permite especificar el fondo (cambia de tamaño si es necesario) o / y el primer plano (no cambia el tamaño) de las imágenes.
fuente
Intente usar NSOperationQueue para lograr esto. Pruebe el código de la siguiente manera:
Espero que esto ayude.
fuente
Use un bloque para no tener que crear un método completamente separado:
Actualizar
Para que quede claro, aún debe establecer el fondo (o la imagen normal) para los estados de combinación, así como los normales, como dice sbrocket en la respuesta aceptada. En algún momento, su botón estará seleccionado y resaltado, y no tendrá una imagen para eso a menos que haga algo como esto:
De lo contrario, su botón puede volver a la imagen UIControlStateNormal para el breve estado seleccionado + resaltado y verá un destello.
fuente
dispatch_get_current_queue()
se declara como "no confiable".dispatch_after
en lugar dedispatch_async
?dispatch_async
es una mejor opción.Rápidamente lo estoy haciendo de la siguiente manera.
Creo una subclase de
UIButton
e implementé una propiedad personalizadastate
Funciona perfectamente para mi.
fuente
Tuve un problema similar en el que quería que un botón mantuviera su resaltado después de hacer clic. El problema es que si intenta utilizar
setHighlighted:YES
dentro de su acción de clic, se restablecerá inmediatamente después de hacer clic en la acción.- (IBAction)checkInButtonPushed
Resolví esto usando un NSTimer como este
y luego llamar
setHighlighted:YES
desde miselectCurrentIndex
método. UtilizoUIButtonTypeRoundedRect
botones normales .fuente
Tengo otra forma ... si no desea usar imágenes y desea el efecto de un botón presionado, puede subclasificar el Botón y aquí está mi código:
en el archivo .h:
En el archivo .m:
fuente
Aquí hay una implementación de C # / MonoTouch (Xamarin.iOS) usando los enfoques presentados anteriormente. Asume que ya ha establecido el estado de la imagen resaltada y configura los estados seleccionados y seleccionados | resaltados para usar la misma imagen.
fuente