2017-04-12 9 views
0

私はSwiftにOSXのアプリケーションを作成しています。NSControlでイベントを捕獲する良い方法を探しています。 明らかに、私は検索しましたが、私が見つけた情報はしばしば不明瞭で古いものです。 私の場合、NSTextField(キーアップ、テキストの変更、フォーカスの消失、...)でいくつかのイベントをキャッチしたいと思います。NSControlのいくつかのイベントを迅速に捕捉する方法

NSTextFieldで「Enter」を押すと、アクションが送信されます。おそらく、NSTextFieldをクリックしたり書き込んだりするときにアクションを送信する方法はありますか?

+0

[NSControlDelegateMethods](https://developer.apple.com/reference/appkit/nscontrol# // apple_ref/occ/instm/NSObject/controlTextDidChange :) – NSNoob

答えて

2

NSTextFieldをサブクラス化し、テキスト変更の場合はtextDidChange、失われたフォーカスの場合はtextDidEndEditing、キーアップの場合はkeyUpメソッドを上書きできます。このようにしてみてください。

import Cocoa 

class CustomTextField: NSTextField { 
    override func viewWillMove(toSuperview newSuperview: NSView?) { 
     // customize your field here 
     frame = newSuperview?.frame.insetBy(dx: 50, dy: 50) ?? frame 
    } 
    override func textDidChange(_ notification: Notification) { 
     Swift.print("textDidChange") 
    } 
    override func textDidEndEditing(_ notification: Notification) { 
     Swift.print("textDidEndEditing") 
    } 
    override func keyUp(with event: NSEvent) { 
     Swift.print("keyUp") 
    } 
} 

ビューコントローラのサンプル使用法:


import Cocoa 
class ViewController: NSViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     let textField = CustomTextField() 
     view.addSubview(textField) 
    } 
} 

Sample

関連する問題