Lea*_*dro 10 cocoa key objective-c nstableview
我正在寻找一个简单的解决方案,通过按下删除键删除NSTableView行.我在谷歌搜索时看到的就是这样的答案:http://likethought.com/lockfocus/2008/04/a-slightly-improved-nstableview/.这在我看来是一个工程解决方案,但我想知道这是否是最好的方法.有人知道更好的答案吗?
Cra*_*tis 26
我通常做的是在应用程序的菜单栏中创建一个新菜单项.就像是:
File -> Delete ${Name of Item}
然后,您可以NSMenuItem在Interface Builder中将其链接到指向在您的应用程序委托或某个其他控制器上某处定义的IBAction方法.此方法的实现应从模型中删除该项,然后刷新NSTableView.
NSMenuItem摆脱行动的好处是:
Iva*_*ica 12
我已经实现了类似的东西LTKeyPressTableView.但是,我使用数组控制器,所以在我的子类中我添加了IBOutlet NSArrayController * relatedArrayController.我没有在委托中处理删除请求,而是直接在子类中处理它,因为我的子类专门处理添加Delete键的处理.当我检测到按键的按键时,我只是打电话[relatedArrayController delete:nil];.
IRTableView.h:
#import <Cocoa/Cocoa.h>
@interface IRTableView : NSTableView {
IBOutlet NSArrayController * relatedArrayController;
}
@end
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
最终结果对我来说非常友好,并且是一个非常简单的解决方案,可用于Cocoa Bindings + Core Data应用程序.
有没有需要继承和捕捉keyDown在NSViewController.
该Delete菜单中的菜单项Edit连接到选择delete:急救员的.如果没有Delete菜单项,请创建一个并将其连接到delete:First Responder(红色立方体).
Delete菜单项(⌫或⌘⌫)的键在视图控制器中实现该IBAction方法
迅速: @IBAction func delete(_ sender: AnyObject)
Objective-C的: -(IBAction)delete:(id)sender
并输入逻辑删除表视图行.
| 归档时间: |
|
| 查看次数: |
7414 次 |
| 最近记录: |