我正在寻找一个简单的解决方案,通过按删除键删除NSTableView行。我在Google搜索时看到的所有答案都是这样的:http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/。这对我来说似乎是一个工程解决方案,但我想知道这是否是最好的方法。有人知道更好的答案吗?NSTableView +删除键
回答
我已经实现了一些类似于LTKeyPressTableView
的东西。但是,我使用数组控制器,所以在我的子类中,我添加了IBOutlet NSArrayController * relatedArrayController
。由于我的子类专门处理添加Delete键的处理,因此我无需在委托中处理删除请求,而是直接在子类中处理它。当我检测到按键的删除键时,我只是打电话给[relatedArrayController delete:nil];
。
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
和IRTableView.m:
#import "IRTableView.h"
@implementation IRTableView
- (void)keyDown:(NSEvent *)event
{
// Based on LTKeyPressTableView.
//https://github.com/jacobx/thoughtkit/blob/master/LTKeyPressTableView
id delegate = [self delegate];
// (removed unused LTKeyPressTableView code)
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
if(key == NSDeleteCharacter)
{
if([self selectedRow] == -1)
{
NSBeep();
}
BOOL isEditing = ([[self.window firstResponder] isKindOfClass:[NSText class]] &&
[[[self.window firstResponder] delegate] isKindOfClass:[IRTableView class]]);
if (!isEditing)
{
[relatedArrayController remove:nil];
return;
}
}
// still here?
[super keyDown:event];
}
@end
最终的结果是相当IB友好对我来说,和使用非常简单的解决方案在Cocoa绑定+核心数据应用。
我通常会在应用程序的菜单栏中创建一个新的菜单项。喜欢的东西:
File -> Delete ${Name of Item}
然后你可以在Interface Builder链接NSMenuItem
指向上或者您的应用程序代理或其他一些地方控制器定义的IBAction为方法。此方法的实施应从您的模型中删除该项目,并刷新NSTableView
。
做出一项NSMenuItem
出操作的优点是:
- ,您可以给项目在Interface Builder键盘快捷键。 (像删除键一样)
- 不熟悉应用程序,害怕按下删除键或因任何原因无法访问键盘的用户仍可以使用此功能。
在10.10之后,NSViewController是应答链中的一部分。所以最简单的方法是在你的子类NSViewController中实现keyDown。
没有必要在NSViewController
中继承并捕获keyDown
。
菜单Edit
中的Delete
菜单项连接到第一响应者的选择器delete:
。如果没有Delete
菜单项,请创建一个并将其连接到First Responder(红色立方体)的delete:
。
- 分配等价键
Delete
菜单项(⌫或⌘⌫) 在视图控制器实现
IBAction
方法夫特:
@IBAction func delete(_ sender: AnyObject)
Objective- C:
-(IBAction)delete:(id)sender
并放入删除表格视图行的逻辑。
嗨,克雷格。你的回答不是我真正期望的,但听起来很不错! = D非常感谢。 – Leandro 2011-01-13 12:18:09
哈哈是的,起初它似乎是一个非常间接的方法,但它工作得非常好,并照顾了很多头痛。 – 2011-01-13 12:24:45