Redrevando un SfauthorizationPluginview
-
21-12-2019 - |
Pregunta
Estoy escribiendo un contenido de autenticación personalizado que tiene algún contenido dinámico (actualmente en forma de etiquetas). Me gustaría poder actualizar las etiquetas en respuesta a los eventos.
Suponiendo las siguientes declaraciones:
-
parent = SFAuthorizationPluginView (subclass)
-
view = NSView (subclass)
-
NSTextField *label = ...
-
-
I Edite el texto de la etiqueta de la siguiente manera (Nota: Esto puede ejecutarse desde la cola de despacho de fondo):
[label setStringValue:@"new text"];
Luego intento forzar una actualización usando lo siguiente:
-
[label setNeedsDisplay:YES];
-
dispatch_async(dispatch_get_main_queue(), ^{ [label setNeedsDisplay:YES]; });
-
[label display];
-
dispatch_async(dispatch_get_main_queue(), ^{ [label display]; });
-
[[label cell] update];
-
dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] update]; });
-
[[label cell] needsDisplay];
-
dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] needsDisplay]; });
-
[view setNeedsDisplay:YES];
-
dispatch_async(dispatch_get_main_queue(), ^{ [view setNeedsDisplay:YES]; });
-
[self updateView];
-
dispatch_async(dispatch_get_main_queue(), ^{ [self updateView]; });
-
[self displayView]
-
dispatch_async(dispatch_get_main_queue(), ^{ [self displayView]; });
Sin embargo, obtengo una mezcla de ninguna acción y parpadeo en pantalla gris (indicando que he causado una excepción).
¿Alguna idea? (Nota: Voy a editar esta pregunta a medida que pruebe varias opciones)
Solución
Creo que todo lo que necesita hacer es poner la actualización de la etiqueta en el código de la cola principal como este:
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});