Cocoa 消失NSTextField文本

Cocoa 消失NSTextField文本,cocoa,nstextfield,first-responder,visual-glitch,Cocoa,Nstextfield,First Responder,Visual Glitch,我在.xib文件中有一个自定义视图,我将其用作MAAttachedWindow的contentViewController。视图中有几个NSTextFields 当我第一次打开MAAttachedWindow时,一切都很好。文本显示在所有相关文本字段中。然后,如果我关闭窗口(将其设置为nil),然后再次调用它(使用与contentViewController相同的自定义视图重新初始化),最后一个firstResponder文本字段现在为空 奇怪的是,如果我单击“空”文本字段,它会显示正确的文本。

我在.xib文件中有一个自定义视图,我将其用作
MAAttachedWindow
contentViewController
。视图中有几个
NSTextField
s

当我第一次打开
MAAttachedWindow
时,一切都很好。文本显示在所有相关文本字段中。然后,如果我关闭窗口(将其设置为
nil
),然后再次调用它(使用与
contentViewController
相同的自定义视图重新初始化),最后一个
firstResponder
文本字段现在为空

奇怪的是,如果我单击“空”文本字段,它会显示正确的文本。只要此文本字段具有焦点,就可以对其进行编辑,并进行适当的操作。一旦其他内容成为第一响应者,文本就会再次消失

更新

  • 改变颜色不会改变上述行为
  • 在此过程中,文本颜色在任何时候都不会改变
  • 占位符文本也受上述行为的影响
  • 在此过程中,任何时候都不会发生错误
  • 这不会发生在
    NSSecureTextField
    s上

尝试将文本字段文本的颜色更改为红色(或任何其他颜色),您可能会看到这里发生的情况。

在将窗口设置为零之前,尝试辞职所有第一响应者。

我明白了


我只需要在关闭(并随后取消分配)我第一次在NSSavePanel的附件视图中遇到这个问题的
MAAttachedWindow
之前,从其
superview
中显式删除
viewController
。 我找到的解决方案是在面板关闭之前将第一响应者移动到面板本身。以下是我的确切方法:

- (void)windowDidEndSheet:(NSNotification *)notification

    NSSavePanel *savePanel = [(XSDocument *)[self document] savePanel];
    if (!savePanel)
        return;
    // this fixes a bug where on next opening one of accessory view's text field will be blank and behave strangely
    [savePanel makeFirstResponder:savePanel];
}

我想这肯定行得通,但不行。看起来这可能不是第一响应者的问题,而是文本问题。谢谢!多讨厌的虫子啊。