【问题标题】:Cursor doesn't update in NSTextField as it autoresizes when resizing the enclosing NSWindow光标不会在 NSTextField 中更新,因为它在调整封闭 NSWindow 的大小时会自动调整大小
【发布时间】:2015-09-07 21:20:17
【问题描述】:

我有一个自动调整大小的 NSTextField。它的文本居中。

当我开始在字段中输入然后调整封闭的 NSWindow 的大小时,光标停留在它所在的位置而不是重新定位到适当的位置:

我还制作了一个 XCode 项目来演示这个问题: https://www.dropbox.com/sh/cohhmslyl9ti43b/AAC6ULteopsQCMDsEArJU15Ta?dl=0

有人知道这里发生了什么吗?

【问题讨论】:

  • 我已根据 Apple 的要求将此作为错误提交。 ID 是 21541483。
  • 来自 Apple:“我们相信这个问题已经在最新的 OS X v10.11 Developer beta 中得到解决。这是一个预发布的 OS X v10.11 更新。请参阅发行说明以获取完整的安装说明。请使用此版本进行测试。如果仍有问题,请提供任何相关日志或信息,以帮助我们进行调查。"

标签: objective-c cocoa nstextfield autoresize nscursor


【解决方案1】:

有趣的问题,我从来没有对文本字段应用自动布局,所以我自己很好奇。

我的解决方案是监听NSWindowDelegate 方法-windowDidResize。 在那之后,我会检查文本字段是否是第一响应者。如果是,我再次将其设置为第一响应者,这会将光标重置到正确的位置。

代码:

   NSResponder *firstResponder = [[NSApp keyWindow] firstResponder];
   if ([firstResponder isKindOfClass:[NSText class]] && (NSTextField*)[(NSText *)firstResponder delegate] == self.centeredText) {
      [self.centeredText becomeFirstResponder];
   }

我重新上传了该项目,以便您也可以查看: https://www.dropbox.com/s/lhsspi5gasbwq8j/CursorDoesNotUpdate%202.zip?dl=0

【讨论】:

  • 谢谢,它可以工作,但会选择文本字段的内容。您如何看待文档,上面写着 “使用 NSWindow makeFirstResponder: 方法,而不是此方法,使对象成为第一响应者。永远不要直接调用此方法。”
  • 嗯没有读到 :) 那么我的解决方案应该改变。不是让它成为第一响应者,而是找到一种方法让 NSTextField 集中?我没有带我的 Macbook,所以我要等到以后才能查看它
  • 我根据stackoverflow.com/questions/764179/focus-a-nstextfield 编辑了您的答案,现在可以正常使用了,再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
相关资源
最近更新 更多