私のNSTableViewがdeleteevnt(バックスペースogでもcmd +バックスペース)を受け入れることは可能ですか?私は、私の削除メニュー項目がペン先の最初のレスポンダーオブジェクトに接続されているNSMenuを持っています。NSTableViewとバックスペースイベント(行の削除) - fieldeditor/firstresponder?
任意のポインタ?実装が容易である
私のNSTableViewがdeleteevnt(バックスペースogでもcmd +バックスペース)を受け入れることは可能ですか?私は、私の削除メニュー項目がペン先の最初のレスポンダーオブジェクトに接続されているNSMenuを持っています。NSTableViewとバックスペースイベント(行の削除) - fieldeditor/firstresponder?
任意のポインタ?実装が容易である
からレコードを削除します削除機能は通常のNSTableViewではなくInterface Builderでサブクラスを使用します。
あなたはこのような例- (void)deleteItem
方法で実装できます。この機能を実装するための正しい方法は、キーバインディングを使用している
- (void)deleteItem
{
if ([self numberOfSelectedRows] == 0) return;
NSUInteger index = [self selectedRow];
[documentController deleteItemWithIndex:index];
}
一つのアプローチ:
を打ちますその後
- (void)keyDown:(NSEvent *)theEvent
{
unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
[self deleteItem];
return;
}
[super keyDown:theEvent];
}
したい任意のNSTableViewを持っていることを確認してください:uはdeleteRecordメソッドを実装し、バックスペースキーの押下はkeyDown
そうのようにすると上書き、あなたはNSTableViewのサブクラスを作成することができ、あなたのテーブルビュー
ええとこれを理解しましたが、1度に1つ以上のテーブルビューを表示すると問題が発生します:) –
を:
作成するアプリケーションの種類によって、検証デリゲートメソッドがあります。これにより、メニュー項目を有効にすることができます。ドキュメントベースのアプリケーションの場合、この検証は- (BOOL)validateUserInterfaceItem:(id)anItem
によって行われます。
これは、NSViewController
とFirst Responder
を使用した最新のソリューションです。
メニューEdit
のDelete
メニュー項目は、First Responderのセレクタdelete:
に接続されています。メニュー項目がDelete
でない場合は、作成し、First Responder(赤い立方体)のdelete:
に接続します。
IBAction
方法を実装するビューコントローラでDelete
メニュー項目(⌫又は⌘⌫)鍵同等の割り当て
スウィフト:@IBAction func delete(_ sender: AnyObject)
Objective- C:-(IBAction)delete:(id)sender
を入力し、テーブルビューの行を削除するロジックを設定します。
サブクラスは必要ありません。
削除アクションはどこから来ますか?私はIBのような多くのアクションをIBで見ることができますが、NSResponderはそれらのすべてを定義していません。 – KoCMoHaBTa
@ IBActionまたは@ objcは同じ結果を返します。これが欠けていると、メニュー項目が削除されます – azimov
複数のビューを同じdocumentControllerから個別に追跡する必要がある場合は、タグつまり、Interface Builderでビューのタグを入力し、 'keyDown:'メソッドでself.tag値の値をチェックします。 – Frost
申し訳ありませんが、この回答には正しい印を付けるべきではありません。このソリューションは、ベストプラクティスではありません。 – Jacque