objective-c - NSOutlineTableView 中的 textShouldEndEditing 被调用两次

标签 objective-c macos cocoa nstextfield

我刚刚实现了以下方法,该方法假设在 NSOutlineView 中的 NSTextField 值更改后采取一些操作

-(BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor
{
    NSLog(@"end editing");
    NSTextField* tf = (NSTextField*)control;

    if(selectedItem && [selectedItem isKindOfClass:[HSCategoryClass class]])
    {
        HSCategoryClass* c = selectedItem;
        c.name = tf.stringValue;

        // request the update from DB
        [[NSNotificationCenter defaultCenter] postNotificationName:@"updatingCategoryName" 
                                                            object:c 
                                              userInfo:@{@"sender":self}];
    }
    return YES;
 }

但是,当我完成编辑并按 Enter 键或导航到文本字段之外的任何位置时,此方法将被调用两次,而不是一次。

有谁知道这是为什么吗?

非常感谢任何形式的帮助!

最佳答案

该例程并不意味着编辑已经结束。相反,调用它是为了确定是否应该结束(该方法的名称由此而来)。框架可以多次调用它,因此您不应该依赖它来实现此目的。

而是重写 NSOutlineView 的 textDidEndEditing: 方法。 请务必调用 super。

因此,您需要对 NSOutlineView 进行子类化,并在您的子类中:

- (void)textDidEndEditing:(NSNotification *)aNotification
{
  // do your stuff

  [super textDidEndEditing:aNotification];

}

关于objective-c - NSOutlineTableView 中的 textShouldEndEditing 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752811/

相关文章:

objective-c - 如何使用按钮删除大纲 View 中包含核心数据的行?

iphone - 在 AlertView OK 按钮声明中执行一段代码

ios - 需要将 NSArray 的元素转换为 Swift 类

macos - Aptana Studio 3 在使用/Mac OS X 10.7 打开的项目上挂起

python - 尝试从 Mac OS X 连接到 Vertica 时连接字符串无效

objective-c - Cocoa:检测无法安装的卷

ios - UIViewTableCell 中的布局 subview 不起作用

objective-c - "The dwarfdump binary must exist and must be executable"是什么意思?

macos - 链接器在链接时是否生成绝对虚拟地址

ios - 尝试获取实体属性的值时出错