默认为双击。如何覆盖它?
最佳答案
实现单击行为的一种方法是重写 setAction
方法。下面是一个针对 NSTableView 执行此操作的示例,它允许用户通过单击一次来编辑表中任意行中的一列:
SingleClickAppDelegate.h
#import <Cocoa/Cocoa.h>
@interface SingleClickAppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSTableView *theTable;
IBOutlet NSArrayController *theArrayController;
NSInteger colNumber;
}
- (void)addRow;
- (void)doClickEdit: (id)sender;
@end
SingleClickAppDelegate.m
#import "SingleClickAppDelegate.h"
@implementation SingleClickAppDelegate
- (void)awakeFromNib
{
[self addRow];
[self addRow];
[self addRow];
[theTable setTarget:self];
/// Single click action
[theTable setAction:@selector(doClickEdit:)];
}
/// Add some temporary data to edit
- (void)addRow
{
NSMutableDictionary *values = [[NSMutableDictionary alloc] init];
[values setObject:[NSNumber numberWithLong:colNumber++] forKey:@"col1"];
[values setObject:@"Text" forKey:@"col2"];
[theArrayController addObject:values];
[values release];
[theTable reloadData];
}
/// Action
- (void)doClickEdit: (id)sender
{
NSLog(@"doClickEdit:");
NSInteger row = [theTable clickedRow];
[theTable editColumn:1 row:row withEvent:nil select:YES];
}
@end
现在在界面生成器中进行绑定(bind):
- 创建
SingleClickAppDelegate
类的对象,它将上述代码与 GUI 连接起来。 - 创建一个 NSTableView 并将其绑定(bind)到
theTable
。 - 将 NSTableView dataSource 和 delegate 绑定(bind)到
SingleClickAppDelegate
。 - 创建一个 NSArrayController 并将其绑定(bind)到
theArrayController
。 - 对于表中的每一列:
- 将其值绑定(bind)到
theArrayController
- 将 Controller 键设置为arrangedObjects。
- 将模型键路径设置为上面的每个键(在本例中为“col1”和“col2”)
- 将其值绑定(bind)到
保存项目并编译,现在应该有一个包含一些行的表。单击一行后,第二列即可编辑。
选择行中的任意位置将始终编辑在 doClickEdit:
中设置的列。
关于cocoa - 如何在 NSTableView 中单击 NSTextFieldCell 进行编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236227/