NSTextField获取焦点,但没有文本输入光标可见
NSTextField在我的情况下没有按预期工作。 我得到的是:
在窗口中显示的视图上的NSTextField控件,它不是主要的应用程序窗口。
这个文本字段最初是不可见的 - 当选择“编辑主题”菜单项(自定义弹出式菜单)时,它放置在一个视图上,
这个动画视图还有其他控件 - 两个按钮:一个删除文本字段中的文本,另一个是“完成”
该窗口还有一个自定义的NSText控件,主要关注(聊天的文本输入控件)
聊天窗口(我正在处理的窗口)也有对话列表。
我正在做的步骤:
但是,没有光标闪烁。 我可以编辑,并且当我开始输入时光标显示,所以我认为,文本字段有焦点。 在视图展开后,我需要立即让光标在那里闪烁。
为动画这个“编辑主题”视图的高度我使用NSAnimationContext runAnimationGroup和完成处理程序我调用NSTextField的窗口与NSTextField作为第一响应者的makeFirstResponder。
我尝试了运行makeFirstResponder的不同组合:在开始动画之前,在动画的完成处理程序中,尝试了不同的performSelector:在主线程上调用dispatch_async,dispatch_after,甚至performClick:(但这种缩小 - 将容器视图动画化为0,外面关闭它)。 效果总是一样的:关注NSTextField - 我可以输入这个文本字段,但最初没有键盘输入光标。
编辑完成后,聊天文本输入窗口光标NSText上的makeFirstResponder正确显示。
我在那里错过了什么? 为什么文本字段没有光标获得焦点? 什么可以防止使第一响应者不显示光标的NSTextField? 我几乎完全确定,在应用程序中的任何地方,我都没有任何其他控制第一响应者。 请帮忙。
经过数小时的实验和互联网浏览寻找解决方案后,我发现这个非常有用的黑客:
https://gist.github.com/Kapeli/7abd83d966957c17a827
- (void)ensureCursorBlink
{
if(isYosemite && !self.stringValue.length)
{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if(!self.stringValue.length)
{
[self setStringValue:@" "];
[self setStringValue:@""];
}
});
}
}
并在makeFirstResponder之后调用它。 实际上,即使没有dispatch_after,它也适用于我。
链接地址: http://www.djcxy.com/p/85259.html上一篇: NSTextField gets focus but no text input cursor is visible
下一篇: How to bind several NSTextFields to entries of an NSMutableDictionary in xib?