NSTextField获取焦点,但没有文本输入光标可见

NSTextField在我的情况下没有按预期工作。 我得到的是:

  • 在窗口中显示的视图上的NSTextField控件,它不是主要的应用程序窗口。

  • 这个文本字段最初是不可见的 - 当选择“编辑主题”菜单项(自定义弹出式菜单)时,它放置在一个视图上,

  • 这个动画视图还有其他控件 - 两个按钮:一个删除文本字段中的文本,另一个是“完成”

  • 该窗口还有一个自定义的NSText控件,主要关注(聊天的文本输入控件)

  • 聊天窗口(我正在处理的窗口)也有对话列表。

  • 我正在做的步骤:

  • 当我右键点击对话时(从列表中),弹出菜单显示出来。
  • 我选择编辑主题菜单项
  • NSTextField的视图展开了一点,NSTextField应该激活,而且我预计在这个NSTextField中会有一个闪烁的光标激活
  • 但是,没有光标闪烁。 我可以编辑,并且当我开始输入时光标显示,所以我认为,文本字段有焦点。 在视图展开后,我需要立即让光标在那里闪烁。

    为动画这个“编辑主题”视图的高度我使用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?