NSTableView和退格事件(删除行) - fieldingitor/firstresponder?

Ras*_*yrk 7 cocoa objective-c nstableview

是否可以让我的NSTableView接受deleteevnt(退格og甚至cmd +退格)?我有一个NSMenu,我的delete-menu-item连接到笔尖中的第一个响应者对象.

有什么指针吗?

dem*_*ner 8

一种易于实现的方法:

  1. 在IB中为您的界面添加+/-按钮并将它们连接到deleteRecord IBAction
  2. 在IB中选择删除( - )按钮,导航到属性检查器>按钮>键等效
  3. 单击该框以开始录制您的按键,然后点击删除/退格键

在构建项目时,假设您实现了deleteRecord方法,Backspace按键将从您的tableview中删除记录

  • 是的,我已经想通了,但是当我一次超过 1 个表视图时,这给我带来了麻烦:) (2认同)

Jac*_*que 6

实现此功能的正确方法是使用键绑定:

  1. 选择IB中的删除菜单项,并将其设置为等效于退格键的键.
  2. 将菜单项操作连接到您为处理任务而编写的方法.当您通过第一响应者连接响应器链时,将为您自动启动此方法.
  3. 实现删除功能.

根据您编写的应用程序类型,有验证委托方法.通过这种方式,您可以设置菜单项启用状态.对于基于文档的应用程序,此验证通过- (BOOL)validateUserInterfaceItem:(id)anItem.


vad*_*ian 5

这是一个使用NSViewController和的现代解决方案First Responder.

Delete菜单中的菜单项Edit连接到选择delete:急救员的.如果没有Delete菜单项,请创建一个并将其连接到delete:First Responder(红色立方体).

  • 分配等同于Delete菜单项(⌘⌫)的键
  • 在视图控制器中实现该IBAction方法

    迅速: @IBAction func delete(_ sender: AnyObject)

    Objective-C的: -(IBAction)delete:(id)sender

    并输入逻辑删除表视图行.

不需要子类.

  • @KoCMoHaBTa 好问题。对于 iOS,它们在 UIResponderStandardEditActions 协议中定义;Cocoa 事件处理指南将它们称为“选择和编辑的标准操作方法”,并指向 NSResponder,但它们没有记录在案。好奇的。 (2认同)

Fro*_*ost 2

您可以创建 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)

  • 抱歉,这个答案不应该被标记为正确。这个解决方案绝对不是最佳实践。 (6认同)