是否可以让我的NSTableView接受deleteevnt(退格og甚至cmd +退格)?我有一个NSMenu,我的删除菜单项连接到笔尖中的第一个响应者对象。
任何指针?
答案 0 :(得分:8)
一种易于实施的方法:
在构建项目时,假设您实现了deleteRecord方法,Backspace按键将从您的tableview中删除记录
答案 1 :(得分:6)
实现此功能的正确方法是使用键绑定:
根据您编写的应用程序类型,有验证委托方法。通过这种方式,您可以设置菜单项启用状态。对于基于文档的应用程序,此验证通过- (BOOL)validateUserInterfaceItem:(id)anItem
进行。
答案 2 :(得分:5)
这是使用NSViewController
和First Responder
的现代解决方案。
菜单Delete
中的Edit
菜单项已连接到First Responder的选择器delete:
。如果没有Delete
菜单项,请创建一个并将其连接到First Responder的delete:
(红色立方体)。
Delete
菜单项的键(⌫或⌘⌫)在视图控制器中实现IBAction
方法
斯威夫特:@IBAction func delete(_ sender: AnyObject)
Objective-C:-(IBAction)delete:(id)sender
并输入逻辑以删除表视图行。
不需要子类。
答案 3 :(得分:2)
您可以创建NSTableView的子类,覆盖keyDown
,如下所示:
- (void)keyDown:(NSEvent *)theEvent
{
unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
[self deleteItem];
return;
}
[super keyDown:theEvent];
}
然后确保您想要具有删除功能的任何NSTableView都使用Interface Builder中的子类而不是常规NSTableView。
您可以实现- (void)deleteItem
方法,例如:
- (void)deleteItem
{
if ([self numberOfSelectedRows] == 0) return;
NSUInteger index = [self selectedRow];
[documentController deleteItemWithIndex:index];
}