Перерисовка SFAuthorizationPluginView
-
21-12-2019 - |
Вопрос
Я пишу собственный плагин AuthenticationPlugin, который имеет динамический контент (в настоящее время в виде меток).Я хотел бы иметь возможность обновлять метки в ответ на события.
Предполагая следующие объявления:
parent = SFAuthorizationPluginView (subclass)
view = NSView (subclass)
NSTextField *label = ...
Я редактирую текст метки следующим образом (примечание:это может быть выполнено из очереди фоновой отправки):
[label setStringValue:@"new text"];
Затем я пытаюсь принудительно обновить, используя следующее:
[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]; });
Однако я получаю смесь отсутствия действий и мерцающего серого экрана (что указывает на то, что я вызвал исключение).
Есть идеи?(Примечание:Я буду редактировать этот вопрос, пробуя разные варианты)
Решение
Я думаю, все, что вам нужно сделать, это поместить обновление метки в код основной очереди следующим образом:
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});