cocoa - 如何在 NSTableView 中单击 NSTextFieldCell 进行编辑?

标签 cocoa nstableview

默认为双击。如何覆盖它?

最佳答案

实现单击行为的一种方法是重写 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 dataSourcedelegate 绑定(bind)到 SingleClickAppDelegate
  • 创建一个 NSArrayController 并将其绑定(bind)到 theArrayController
  • 对于表中的每一列:
    • 将其值绑定(bind)到theArrayController
    • Controller 键设置为arrangedObjects。
    • 模型键路径设置为上面的每个键(在本例中为“col1”和“col2”)

保存项目并编译,现在应该有一个包含一些行的表。单击一行后,第二列即可编辑。

选择行中的任意位置将始终编辑在 doClickEdit: 中设置的列。

关于cocoa - 如何在 NSTableView 中单击 NSTextFieldCell 进行编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236227/

相关文章:

objective-c - NSTableView 和退格事件(删除行)-fieldeditor/firsterresponder?

objective-c - NSTableView 在 NSCell 中具有多个 UI 元素(如 Transmission)

iphone - 以下语法的含义是什么? (objective-c 风格的方法调用)

objective-c - 覆盖 UILabel 的 setText 方法?

macos - NSTableView 带圆角

macos - NSTableView -noteNumberOfRowsChanged 的​​ NSView 版本是什么?

objective-c - 在 Mac OS X 中以编程方式更改窗口高度超过屏幕高度

swift - macOS:向 Cocoa 绑定(bind)公开 Swift 属性的正确方法

objective-c - TrackingArea 中的 NSPopUpButton -> 从菜单中选择项目时鼠标退出

objective-c - 在Cocoa/Obj-C中,如何捕获cmd-c事件?