【问题标题】:How to change cursor on hover NSTextView? Swift 4, Xcode 9.4如何在悬停 NSTextView 上更改光标?斯威夫特 4,Xcode 9.4
【发布时间】:2019-02-21 22:51:14
【问题描述】:

我有一个简单的NSTextView,它看起来像一个超链接,我想在用户悬停此NSTextView 时更改指针上的光标。我该怎么做?我知道NSCursor,但是苹果文档很烂而且没有例子,我不知道如何使用它。

这是我的NSTextView

let linkView = NSTextView()
    linkView.font = NSFont(name: "SF Pro Display", size: 13)
    linkView.isEditable = false
    linkView.isFieldEditor = false
    linkView.isHidden = false

    linkView.string = (URL(string: (data?.link)!)?.host)!

    let attributedString = NSMutableAttributedString(string: linkView.string)
    let range = NSRange(location: 0, length: linkView.string.count)
    let url = URL(string: (data?.link)!)

    attributedString.setAttributes([.link: url!], range: range)
    linkView.textStorage?.setAttributedString(attributedString)

    linkView.linkTextAttributes = [.underlineStyle: NSUnderlineStyle.styleSingle.rawValue]

【问题讨论】:

    标签: swift macos nstextview nscursor


    【解决方案1】:

    将光标样式添加到链接文本属性中:

    link.linkTextAttributes = [.cursor: NSCursor.pointingHand]
    

    【讨论】:

    【解决方案2】:

    试试这个,它对我有用:

    import Cocoa
    
    class HyperlinkTextView: NSTextView {
    
        private(set) var href: String = ""
    
        //MARK: Override
    
        override func updateTrackingAreas() {
            for area in self.trackingAreas {
                self.removeTrackingArea(area)
            }
            self.addTrackingRect(self.bounds, owner: self, userData: nil, assumeInside:     false)
        }
    
        override func mouseDown(with event: NSEvent) {
            super.mouseDown(with: event)
            if let url = URL(string: self.href) {
                NSWorkspace.shared.open(url)
            }
        }
    
        override func mouseExited(with event: NSEvent) {
            super.mouseExited(with: event)
            //Added a pointing hand here
            self.addCursorRect(self.bounds, cursor: .pointingHand)
        }
    
        override func mouseEntered(with event: NSEvent) {
            super.mouseEntered(with: event)
            //Back to the system cursor
            self.removeCursorRect(self.bounds, cursor: .pointingHand)
        }
    
        //MARK: Public
    
        func setHref(name: String, link: String) {
    
            self.href = link
    
            let attrTitle = NSMutableAttributedString.init(string: name)
            let range = NSMakeRange(0, attrTitle.length)
            attrTitle.addAttributes([NSAttributedString.Key.link : NSURL.init(string: link)!], range: range)
            attrTitle.setAlignment(NSTextAlignment.center, range: range)
            self.linkTextAttributes = [
                .font: NSFont.systemFont(ofSize: 10.0),
                .foregroundColor: NSColor.blue,
                .underlineStyle: NSUnderlineStyle.single.rawValue,
            ]
            self.textStorage?.setAttributedString(attrTitle)
    
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多