Swift-4 MacOS检测鼠标滚轮滚动到NSTextField?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift-4 MacOS检测鼠标滚轮滚动到NSTextField?相关的知识,希望对你有一定的参考价值。

我在使用Swift-4的MacOS应用程序上有一个NSTextField

其目的是让用户输入一个数字。有没有办法根据向上滚动或向下滚动鼠标滚轮来更改数字?

答案

您可以覆盖scrollWheel(with event: NSEvent)方法并检查event.deltaY是正还是负,并增加或减少textField值:

import Cocoa
class ViewController: NSViewController {
    @IBOutlet weak var textField: NSTextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.stringValue = "0"
    }
    override func scrollWheel(with event: NSEvent) {
        super.scrollWheel(with: event)
        if var value = Int(textField.stringValue) {
            if event.deltaY > 0 {
                value += 1
            }
            if event.deltaY < 0 {
                value -= 1
            }
            textField.stringValue = String(value)
            print(value)
        }
    }
}

如果您只想更改具有焦点的字段,可以使用视图窗口fieldEditor:

if let text = view.window?.fieldEditor(false, for: nil) {
    if var value = Int(text.string) {
        if event.deltaY > 0 {
            value += 1
        }
        if event.deltaY < 0 {
            value -= 1
        }
        text.string = String(value)
        print(value)
    }
}

如果要将滚动限制为仅特定字段,则需要将视图控制器设置为其委托,并将其委托与textfield对象进行比较:

import Cocoa
class ViewController: NSViewController, NSTextFieldDelegate {
    @IBOutlet weak var textField1: NSTextField!
    @IBOutlet weak var textField2: NSTextField!
    override func viewDidAppear() {
        super.viewDidAppear()
        textField1.delegate = self
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        textField1.stringValue = "0"
        textField2.stringValue = "0"
    }
    override func scrollWheel(with event: NSEvent) {
        super.scrollWheel(with: event)
        if let textField = (view.window?.firstResponder as? NSTextView)?.delegate, textField === textField1 {
            if let text = view.window?.fieldEditor(false, for: nil) {
                if var value = Int(text.string) {
                    if event.deltaY > 0 {
                        value += 1
                    }
                    if event.deltaY < 0 {
                        value -= 1
                    }
                    text.string = String(value)
                    print(value)
                }
            }
        }
    }
}

以上是关于Swift-4 MacOS检测鼠标滚轮滚动到NSTextField?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测鼠标滚轮滚动的方向?

Flutter web GestureDetector:检测鼠标滚轮事件

在Edge里鼠标滚轮一动,页面就前进或后退了。怎样取消这个功能?

tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮

vb如何监视鼠标滚轮事件

tkinter:将鼠标滚轮绑定到滚动条