I have a custom NSTableView subclass filled with several custom NSTextFieldCell subclasses. I would like to be able to change the edited cell by using the arrow keys.
I am able to accomplish this by creating a custom field editor (by subclassing NSTextView) and returning it from the window delegate like so:
- (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;
}
}
In MyNSTextViewSubclass, I override the moveUp:,moveDown:,moveLeft:,and moveRight: methods to implement my desired functionality, and that all works fine. The only problem is that the field editor no longer behaves like a text field cell editor. For example, when I hit the Enter key, it inserts a newline into the text field instead of ending the editing.
How do I create a custom field editor that responds exactly like the default one does for an NSTextFieldCell (except for those four functions that I will override)? Or is there a better way to change the functionality of moveUp:,moveDown:,moveLeft:,and moveRight:?
EDIT: It appears that the field editor sets the text field as its delegate when it is selected for editing. In that case, it might be helpful to just attach to the control:textView:doCommandBySelector: delegate method as described here, but when I implement that function in either my NSTextFieldCell subclass or my NSTableView subclass, it never gets called. Why not?