消失的 NSTextField 文本

Posted

技术标签:

【中文标题】消失的 NSTextField 文本【英文标题】:Vanishing NSTextField Text 【发布时间】:2011-11-03 18:58:18 【问题描述】:

我在 .xib 文件中有一个自定义视图,我将其用作 contentViewControllerMAAttachedWindow。该视图中有几个NSTextFields。

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

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

更新

更改颜色并没有改变上述行为。 在此过程中,文本颜色不会随时更改。 占位符文本也受上述行为的影响。 在此过程中的任何时候都不会发生错误。 NSSecureTextFields 不会发生这种情况。

【问题讨论】:

【参考方案1】:

我第一次遇到这个问题about 5 years ago 是使用 NSSavePanel 的附件视图。 我找到的解决方案是在面板关闭之前将第一响应者移动到面板本身。这是我的确切方法:

- (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];

【讨论】:

谢谢!多么烦人的错误。【参考方案2】:

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

【讨论】:

【参考方案3】:

我明白了!

我只需要在关闭(并随后解除分配)MAAttachedWindow 之前从其superview 中显式删除viewController

【讨论】:

【参考方案4】:

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

【讨论】:

我认为这肯定行得通,但没有用。看起来可能不是firstResponder 问题,而是文本问题。

以上是关于消失的 NSTextField 文本的主要内容,如果未能解决你的问题,请参考以下文章

NSTextField 文本的系统颜色是啥?

NSTextField,在 Swift 中更改文本

从 NSTextField 获取文本 [重复]

聚焦一个 NSTextField

NSTextField - 黑色背景上的白色文本,但黑色光标

Mac OS X:删除标签中的文本(NSTextField)