Objective c NSTextField聚焦前光标错误

Objective c NSTextField聚焦前光标错误,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我可以使用NSAttributedString在NSTextField元素上设置可单击链接。视图一出现,文本就会正确显示(蓝色,带下划线) 但是,在NSTEXT字段上第一次单击(任意位置)之前,悬停时显示的光标是编辑(I型梁)光标。单击后,当鼠标悬停在文本的“超链接”部分时,手点光标将按预期显示 我能够子类化NSTextField并重写resetCursorRects,但是,这允许我更改整个NSTextField绑定的光标,我希望它仅在鼠标悬停在文本的超链接部分时显示(或者使用cursorRec

我可以使用
NSAttributedString
NSTextField
元素上设置可单击链接。视图一出现,文本就会正确显示(蓝色,带下划线)

但是,在NSTEXT字段上第一次单击(任意位置)之前,悬停时显示的光标是编辑(I型梁)光标。单击后,当鼠标悬停在文本的“超链接”部分时,手点光标将按预期显示

我能够子类化
NSTextField
并重写resetCursorRects,但是,这允许我更改整个NSTextField绑定的光标,我希望它仅在鼠标悬停在文本的超链接部分时显示(或者使用cursorRects,但这似乎有点过分,以在(创建时已迭代过的)上迭代)全文)


我还尝试设置属性字符串的
NSCursor
属性,但这并没有解决问题。

我认为
NSTextField
不直接支持这一点。当您单击textfield时,它开始工作,因为此时已创建textfield的字段编辑器;字段编辑器是一个
NSTextView
,它执行您希望它执行的操作。所以你基本上有两个选择。您可以(1)做一件简单的事,使用
NSTextView
而不是
NSTextField
(有什么特别的原因不能这么做吗?)或者(2)您可以自己在
resetCursorRects
中设置右光标rects,方法是在设置了link属性的字符范围的rects中循环,但这意味着要设置一个布局管理器等等——如果您使用
NSTextView
,这一切都可以为您完成。第三种可能是在用户点击之前,让textfield的字段编辑器立即出现——换句话说,让textfield成为第一响应者。但是,只有当您的窗口中只有一个这样的文本字段,并且窗口中没有任何其他字段希望成为第一响应者时,这才有效,因此这可能不是一个非常令人满意的解决方案。

我相信
NSTextField
并不直接支持这一点。当您单击textfield时,它开始工作,因为此时已创建textfield的字段编辑器;字段编辑器是一个
NSTextView
,它执行您希望它执行的操作。所以你基本上有两个选择。您可以(1)做一件简单的事,使用
NSTextView
而不是
NSTextField
(有什么特别的原因不能这么做吗?)或者(2)您可以自己在
resetCursorRects
中设置右光标rects,方法是在设置了link属性的字符范围的rects中循环,但这意味着要设置一个布局管理器等等——如果您使用
NSTextView
,这一切都可以为您完成。第三种可能是在用户点击之前,让textfield的字段编辑器立即出现——换句话说,让textfield成为第一响应者。但是,只有当您的窗口中只有一个这样的文本字段,并且窗口中没有任何其他字段希望成为第一响应者时,这才有效,因此这可能不是一个非常令人满意的解决方案。

我相信
NSTextField
并不直接支持这一点。当您单击textfield时,它开始工作,因为此时已创建textfield的字段编辑器;字段编辑器是一个
NSTextView
,它执行您希望它执行的操作。所以你基本上有两个选择。您可以(1)做一件简单的事,使用
NSTextView
而不是
NSTextField
(有什么特别的原因不能这么做吗?)或者(2)您可以自己在
resetCursorRects
中设置右光标rects,方法是在设置了link属性的字符范围的rects中循环,但这意味着要设置一个布局管理器等等——如果您使用
NSTextView
,这一切都可以为您完成。第三种可能是在用户点击之前,让textfield的字段编辑器立即出现——换句话说,让textfield成为第一响应者。但是,只有当您的窗口中只有一个这样的文本字段,并且窗口中没有任何其他字段希望成为第一响应者时,这才有效,因此这可能不是一个非常令人满意的解决方案。

我相信
NSTextField
并不直接支持这一点。当您单击textfield时,它开始工作,因为此时已创建textfield的字段编辑器;字段编辑器是一个
NSTextView
,它执行您希望它执行的操作。所以你基本上有两个选择。您可以(1)做一件简单的事,使用
NSTextView
而不是
NSTextField
(有什么特别的原因不能这么做吗?)或者(2)您可以自己在
resetCursorRects
中设置右光标rects,方法是在设置了link属性的字符范围的rects中循环,但这意味着要设置一个布局管理器等等——如果您使用
NSTextView
,这一切都可以为您完成。第三种可能是在用户点击之前,让textfield的字段编辑器立即出现——换句话说,让textfield成为第一响应者。但是,只有当你的窗口中只有一个这样的文本字段,并且如果窗口中没有任何其他内容想要成为第一响应者,那么这才有效,因此这不是一个非常令人满意的解决方案,可能。

看起来NSTextView显示了正确的光标,而NSTextField没有显示。看起来NSTextView显示了正确的光标,NSTextField没有显示。看起来NSTextView显示了正确的光标,NSTextField没有显示。