gpt4 book ai didi

objective-c - 属性字符串超链接未显示正确的光标

转载 作者:太空狗 更新时间:2023-10-30 04:00:57 24 4
gpt4 key购买 nike

我正在关注一个 example from Apple 在 NSTextField 中创建超链接(通过属性字符串),尽管超链接本身有效,但光标存在问题。也就是说,当您将鼠标悬停在超链接上时,它会显示普通的 I 型光标,直到您单击它为止。点击一次后,显示正确的手形光标。

我已经搜索了一段时间,似乎没有一个简单的答案来解决这个问题,这令人困惑,因为超链接似乎很常见。人们之前建议使用超链接的 NSButtons(那么你如何在悬停时获得下划线?)和 NSTextViews,但这似乎有点 hack-y。在 OSX 编程中建立超链接的正确方法是什么?

注意:我偶然发现了 this article 显示了使用 TextView 和“类别”执行此操作的方法。这是做事的正确方法吗?我想编写可维护且干净的代码。

谢谢!

最佳答案

基于 Apple 的示例和@stevesliva 的回答,这是我想出的:

import Cocoa

extension NSAttributedString {

/// Return an attributed string that looks like a hyperlink
///
/// Based on code at <https://developer.apple.com/library/mac/qa/qa1487/_index.html>
///
/// - parameters:
/// - string: text to be turned into a hyperlink
/// - URL: destination of the hyperlink
/// - returns: `NSAttributedString`
static func hyperlinkFromString(string: String, withURL URL: NSURL) -> NSAttributedString {

let attrString = NSMutableAttributedString(string: string)
let range = NSMakeRange(0, attrString.length)

attrString.beginEditing()

attrString.addAttribute(NSLinkAttributeName,
value: URL.absoluteString,
range: range)

attrString.addAttribute(NSForegroundColorAttributeName,
value: NSColor.blueColor(),
range: range)

attrString.addAttribute(NSUnderlineStyleAttributeName,
value: NSNumber(int: Int32(NSUnderlineStyle.StyleSingle.rawValue)),
range: range)

attrString.fixAttributesInRange(range)

attrString.endEditing()

return attrString
}
}

/// Subclass of NSTextField used to display hyperlinks
class HyperlinkTextField: NSTextField {
/// Set content to be a hyperlink
///
/// Based on code at <https://developer.apple.com/library/mac/qa/qa1487/_index.html>
///
/// - parameters:
/// - title: text displayed in field
/// - URL: destination of hyperlink
func setHyperlinkWithTitle(title: String, URL: NSURL) {
allowsEditingTextAttributes = true
selectable = true
attributedStringValue = NSAttributedString.hyperlinkFromString(title,
withURL: URL)
}

/// Always display a pointing-hand cursor
override func resetCursorRects() {
addCursorRect(bounds, cursor: NSCursor.pointingHandCursor())
}
}

关于objective-c - 属性字符串超链接未显示正确的光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24437970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com