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

前端之家收集整理的这篇文章主要介绍了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子类中定义的自定义函数,它跟踪当前编辑的单元格,然后相应地移动它.

原文链接:/cocoa/568449.html

猜你在找的cocoa相关文章