objective-c – NSTableView中NSTextFieldCell的自定义字段编辑器

我有一个自定义的NSTableView子类填充了几个自定义NSTextFieldCell子类.我希望能够使用箭头键更改编辑的单元格.

我能够通过创建自定义字段编辑器(通过子类化NSTextView)并从窗口委托中返回它来完成此操作,如下所示:

- (id) windowWillReturnFieldEditor:(NSWindow *) aWindow toObject:(id) anObject {
    if ([anObject isEqual:myCustomTable]) {
        if (!myCustomFieldEditor) {
            myCustomFieldEditor = [[MyNSTextViewSubclass alloc] init];
            [myCustomFieldEditor setTable:anObject];
        }
        return myCustomFieldEditor;
    }
    else {
        return nil;
    }
}

在MyNSTextViewSubclass中,我重写moveUp:,moveDown:,moveLeft:和moveRight:方法来实现我想要的功能,并且一切正常.唯一的问题是字段编辑器不再像文本字段单元格编辑器那样.例如,当我按Enter键时,它会在文本字段中插入换行符,而不是结束编辑.

如何创建一个自定义字段编辑器,其响应方式与NSTextFieldCell的默认响应完全相同(除了我将覆盖的那四个函数)?或者有更好的方法来改变moveUp:,moveLeft:和moveRight的功能:?

编辑:当选择进行编辑时,字段编辑器似乎将文本字段设置为其委托.在这种情况下,附加到控件可能会有所帮助:textView:doCommandBySelector:委托方法,如here所述,但是当我在我的NSTextFieldCell子类或我的NSTableView子类中实现该函数时,它永远不会被调用.为什么不?

解决方法

我几乎整天都在研究这个问题,但我终于明白了.为了能够使用箭头键遍历我的NSTableView子类,我必须将以下方法添加到我的NSTableView:

- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector {
    if(aSelector == @selector(moveUp:)) {
        [self moveSelectionToPreviousRow];
        return YES;
    } else if(aSelector == @selector(moveDown:)) {
        [self moveSelectionToNextRow];
        return YES;
    } else if(aSelector == @selector(moveLeft:)) {
        [self moveSelectionToPreviousColumn];
        return YES;
    } else if(aSelector == @selector(moveRight:)) {
        [self moveSelectionToNextColumn];
        return YES;
    }
    return NO;
}

这是因为默认字段编辑器是NSTextView(不是NSControl)所以我需要使用< NSTextViewDelegate>协议.设置为其委托的视图是NSTableView,而不是NSTextFieldCell. moveSelectionTo …函数是我的NSTableView子类中定义的自定义函数,它跟踪当前编辑的单元格,然后相应地移动它.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...