【问题标题】:NSTextField gets focus but no text input cursor is visibleNSTextField 获得焦点,但没有文本输入光标可见
【发布时间】:2016-08-25 12:19:48
【问题描述】:

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

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

  • 本文最初不可见 - 它位于选择“编辑主题”菜单项时动画其高度的视图(自定义弹出菜单)

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

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

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

我正在做这些步骤:

  • 当我右键单击对话(从列表中)时,会显示弹出菜单。
  • 我选择编辑主题菜单项
  • 带有 NSTextField 的视图稍微扩展了一点,NSTextField 应该会激活,我希望在这个 NSTextField 中会激活一个闪烁的光标

但是,没有光标闪烁。我可以编辑,当我开始输入时光标会显示,所以我认为文本字段有焦点。我需要在视图展开后立即让光标在那里闪烁。

要为这个“编辑主题”视图的高度设置动画,我使用 NSAnimationContext runAnimationGroup 并在完成处理程序中调用 NSTextField 窗口上的 makeFirstResponder,NSTextField 作为第一响应者。

我尝试了运行makeFirstResponder的不同组合:在开始动画之前,在动画的完成处理程序中,尝试了performSelector的不同变体:在主线程上调用,使用dispatch_async,dispatch_after,甚至performClick:(但是这个收缩动画容器视图为0,因为任何外部点击都会关闭它)。效果总是一样的:重点放在 NSTextField - 我可以在这个文本字段中输入,但最初没有键盘输入光标。

编辑完成后,NSText 上的 makeFirstResponder 即聊天的文本输入窗口光标会正确显示在那里。

我在那里缺少什么?为什么文本字段在没有光标的情况下获得焦点?什么可以阻止作为第一响应者的 NSTextField 不显示光标?我几乎完全确定我不会在应用程序的任何地方进行任何其他控制第一响应者。请帮忙。

【问题讨论】:

    标签: objective-c macos cocoa cursor nstextfield


    【解决方案1】:

    经过数小时的实验和互联网浏览以寻找解决方案,我发现这个非常有用的技巧:

    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,它也对我有用。

    【讨论】:

      【解决方案2】:

      经过几天的尝试,这对我有用:

      [textField selectText:nil];
      

      看到这个帖子:http://cocoadev.github.io/MakingNSTextFieldActive/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        • 2014-11-18
        相关资源
        最近更新 更多