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没有显示。