NSTextField
で定義したやつはコピペできない・・・。
例えばこんなコード。
let urlField = NSTextField() urlField.frame = NSRect(x: 0, y: 0, width: 300, height: 20) urlField.lineBreakMode = NSLineBreakMode.byTruncatingHead urlField.usesSingleLineMode = true // do something
一応探すとperformKeyEquivalent
をオーバーライドして各イベントでコピペ用のコードを実装するっぽい。
Swift2のコードがあった。
override func performKeyEquivalent(event: NSEvent) -> Bool {
ではなく、with
をつけないとダメッっぽい。
・コピペできるNSTextFieldの継承クラス全コード
class Editing: NSTextField { private let commandKey = NSEventModifierFlags.command.rawValue private let commandShiftKey = NSEventModifierFlags.command.rawValue | NSEventModifierFlags.shift.rawValue override func performKeyEquivalent(with event: NSEvent) -> Bool { if event.type == NSEventType.keyDown { if (event.modifierFlags.rawValue & NSEventModifierFlags.deviceIndependentFlagsMask.rawValue) == commandKey { switch event.charactersIgnoringModifiers! { case "x": if NSApp.sendAction(#selector(NSText.cut(_:)), to:nil, from:self) { return true } case "c": if NSApp.sendAction(#selector(NSText.copy(_:)), to:nil, from:self) { return true } case "v": if NSApp.sendAction(#selector(NSText.paste(_:)), to:nil, from:self) { return true } case "z": if NSApp.sendAction(Selector(("undo:")), to:nil, from:self) { return true } case "a": if NSApp.sendAction(#selector(NSResponder.selectAll(_:)), to:nil, from:self) { return true } default: break } } else if (event.modifierFlags.rawValue & NSEventModifierFlags.deviceIndependentFlagsMask.rawValue) == commandShiftKey { if event.charactersIgnoringModifiers == "Z" { if NSApp.sendAction(Selector(("redo:")), to:nil, from:self) { return true } } } } return super.performKeyEquivalent(with: event) } }
こう使う。
let urlField = Editing() urlField.frame = NSRect(x: 0, y: 0, width: 300, height: 20) urlField.lineBreakMode = NSLineBreakMode.byTruncatingHead urlField.usesSingleLineMode = true // do something
詳細! Swift 3 iPhoneアプリ開発 入門ノート Swift3 + Xcode 8対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2016/11/05
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 荻原剛志
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/27
- メディア: 単行本
- この商品を含むブログを見る