Ras*_*yrk 7 cocoa objective-c nstableview
是否可以让我的NSTableView接受deleteevnt(退格og甚至cmd +退格)?我有一个NSMenu,我的delete-menu-item连接到笔尖中的第一个响应者对象.
有什么指针吗?
一种易于实现的方法:
在构建项目时,假设您实现了deleteRecord方法,Backspace按键将从您的tableview中删除记录
实现此功能的正确方法是使用键绑定:
根据您编写的应用程序类型,有验证委托方法.通过这种方式,您可以设置菜单项启用状态.对于基于文档的应用程序,此验证通过- (BOOL)validateUserInterfaceItem:(id)anItem.
这是一个使用NSViewController和的现代解决方案First Responder.
该Delete菜单中的菜单项Edit连接到选择delete:急救员的.如果没有Delete菜单项,请创建一个并将其连接到delete:First Responder(红色立方体).
Delete菜单项(⌫或⌘⌫)的键在视图控制器中实现该IBAction方法
迅速: @IBAction func delete(_ sender: AnyObject)
Objective-C的: -(IBAction)delete:(id)sender
并输入逻辑删除表视图行.
不需要子类.
您可以创建 NSTableView 的子类,keyDown像这样重写:
- (void)keyDown:(NSEvent *)theEvent
{
unichar key = [[theEvent charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
[self deleteItem];
return;
}
[super keyDown:theEvent];
}
Run Code Online (Sandbox Code Playgroud)
然后确保您想要具有删除功能的任何 NSTableView 使用 Interface Builder 中的子类而不是常规 NSTableView。
- (void)deleteItem您可以像这样实现该方法:
- (void)deleteItem
{
if ([self numberOfSelectedRows] == 0) return;
NSUInteger index = [self selectedRow];
[documentController deleteItemWithIndex:index];
}
Run Code Online (Sandbox Code Playgroud)