ツールとか使っていると、数値入力時に矢印キー押したら数値がインクリメント/デクリメントしたりできて便利だったりします。
それを実装しようとしてInterfaceBuilderの設定とにらめっこしてたんですが、特にそんな項目はなくコードで書いたら以外と楽にできました。
流れ
矢印キー押下時に、NSControlTextEditingDelegateの control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool
が呼び出されるので、このメソッドの中でキーバインドの値を判断して処理を行います。
今回は以下のキーバインドを見て数値をインクリメント/デクリメントします。
- ▲キー →
NSResponder.moveUp(_:)
- ▼キー →
NSResponder.moveDown(_:)
サンプルコード
SampleViewController.swift
func control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool {
if let textField = control as? NSTextField {
if let currentNum = Int(textField.stringValue) {
if commandSelector == #selector(NSResponder.moveUp(_:)) {
textField.stringValue = "\(currentNum + 1)"
// 戻り値がtrueの場合、何もしない
return true
} else if commandSelector == #selector(NSResponder.moveDown(_:)) {
textField.stringValue = "\(currentNum - 1)"
// 戻り値がtrueの場合、何もしない
return true
}
}
}
// 戻り値がfalseの場合、commandSelectorが呼び出される
return false
}