首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特-4 MacOS检测到鼠标滚轮超过NSTextField?

斯威夫特-4 MacOS检测到鼠标滚轮超过NSTextField?
EN

Stack Overflow用户
提问于 2017-12-20 15:43:09
回答 1查看 1.7K关注 0票数 2

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

它的目的是用户输入一个数字。是否有一种方法可以根据鼠标滚轮的向上滚动或向下滚动来更改数字?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-20 15:59:55

您只需重写scrollWheel(with event: NSEvent)方法,并检查event.deltaY是正还是负,并增加或减少textField值:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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对象进行比较:

代码语言:javascript
复制
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)
        NSSound(named: "Tink")?.stop
        if view.window?.firstResponder?.textView?.delegate === textField1,
            let text = view.window?.fieldEditor(false, for: nil),
            var value = Int(text.string) {
            if event.deltaY < 0 { value += 1 }
            if event.deltaY > 0 { value -= 1 }
            NSSound(named: "Tink")?.play()
            text.string = String(value)
            print(value)
        }
    }
}
代码语言:javascript
复制
extension NSResponder {
    var textView: NSTextView? { return self as? NSTextView }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47909725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档