objective-c - 重绘 SFAuthorizationPluginView

标签 objective-c macos cocoa sfauthorizationpluginview

我正在编写一个自定义的 AuthenticationPlugin,其中包含一些动态内容(当前以标签的形式)。我希望能够更新标签以响应事件。

假设有以下声明:

  • parent = SFAuthorizationPluginView(子类)
    • view = NSView(子类)
      • NSTextField *label = ...

我按如下方式编辑标签文本(注意:这可以从后台调度队列执行):
[label setStringValue:@"新文本"];

然后我尝试使用以下命令强制更新:

  • [标签setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [label setNeedsDisplay:YES]; });
  • [标签显示];
  • dispatch_async(dispatch_get_main_queue(), ^{ [标签显示]; });
  • [[标签单元]更新];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[标签单元格]更新]; });
  • [[标签单元格] needDisplay];
  • dispatch_async(dispatch_get_main_queue(), ^{ [[标签单元格] needDisplay]; });
  • [view setNeedsDisplay:YES];
  • dispatch_async(dispatch_get_main_queue(), ^{ [view setNeedsDisplay:YES]; });
  • [ self 更新 View ];
  • dispatch_async(dispatch_get_main_queue(), ^{ [self updateView]; });
  • [ self 显示 View ]
  • dispatch_async(dispatch_get_main_queue(), ^{ [self displayView]; });

但是,我得到的结果是没有任何操作和闪烁的灰屏(表明我引起了异常)。

有什么想法吗? (注意:当我尝试各种选项时,我将编辑这个问题)

最佳答案

我认为您需要做的就是将标签的更新放入主队列代码中,如下所示:

dispatch_async(dispatch_get_main_queue(), ^{
 label.text = "Hello World!";
});

关于objective-c - 重绘 SFAuthorizationPluginView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24028742/

相关文章:

macos - Swift 中的授权创建 (Xcode 6)

macos - Mac OS X 沙箱和磁盘仲裁

cocoa - 在计算机之间发送消息

c# - 我们能得到已经打开的NSWindow的类名吗?

iPhone UIView touchesMoved : withEvent: does not get called on UIView with gesture recognizers

objective-c - 流畅的 UITextView 自动滚动到框架底部

mysql - 在Mac中使用命令行将sql文件导入运行xampp的Mysql

xcode - 如何在 Cocoa 或 Xcode 编程中使用 mainmenu nib (xib) 文件设置环境变量?

iphone - 更新本地通知 BadgeNumber

objective-c - 我正在使用 ARC 在 Objective-C 中编写一个 Button 类——如何防止 Clang 在选择器上发出内存泄漏警告?