У меня есть tableView с 3 столбцами, содержащими NSTextFieldCell.Все заполнено привязками.
Текст ячеек одного из столбцов вычисляется и не редактируется напрямую.Для этого столбца мне бы хотелось, чтобы , когда ячейка переходит в режим редактирования , чтобы отображало кнопку или пользовательский вид вместо textField .
Сказанный другим способом, яхотите NSCell , который является NSTextFieldCell , когда он не редактируется, и NSButtonCell (или пользовательский вид), когда он редактируется.
Любойнамек, чтобы перейти к этому?
Вот что я пытался, но безуспешно:
Я подклассифицировал NSTextFieldCell
и переопределить fieldEditorForView:
, как показано ниже => проблема в том, что NSButton, который я возвращаю, не отвечает на setDelegate:
и, вероятно, на многие другие вещи.
- (NSTextView *)fieldEditorForView:(NSView *)aControlView {
NSTableView *tableView = (NSTableView *) aControlView;
// Manually computing column and row index for testing purposes
NSButton* button = [[NSButton alloc] initWithFrame:[tableView frameOfCellAtColumn:2 row:2]];
return (NSTextView *)button;
}
Подкласс NSTextFieldCell
и переопределение drawWithFrame: inView:
=> этот метод используется только для рисования ячейки, когда он не находится в режиме редактирования.
У этого предложения есть потенциал, но я, очевидно, что-то здесь упускаю.
Реализация windowWillReturnFieldEditor: toObject:
в делегате моего окнаи верните редактор пользовательских полей.Кажется, я на правильном пути, но что-то упустил.Аргумент anObject никогда не является моей пользовательской ячейкой (я дважды проверил, и он правильно определен в XIB).
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject
{
if ([anObject isKindOfClass:[NSCellTextAndButtonAtEditTime class]])
{
NSLog(@"Going there");
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
button.title = @"test";
return button;
}
return nil;
}