NSTextFieldCell
наследуется от NSCell
(ну, технически от NSActionCell
, который наследуется от NSCell
). Класс NSCell
используется для (из документов ):
Класс NSCell предоставляет механизм для отображения текста или изображений в объекте NSView без дополнительных затрат полного подкласса NSView .
В частности, класс ячеек используется для «отображения текста или изображений» и не имеет отношения к взаимодействию с пользователем. Аналогично, с классом NSTextField
:
Класс NSTextField использует класс NSTextFieldCell для реализации своего пользовательского интерфейса.
NSTextField
имеет дело с фактическим пользовательским вводом, в то время как ячейка текстового поля просто реализует его пользовательский интерфейс, и, аналогично, методы делегирования для уведомления о завершении редактирования текста предоставляются через NSTextField
класс и не через NSTextFieldCell
класс.
Если вы хотите получать уведомления, когда редактирование заканчивается в NSTableView
, то вам необходимо зарегистрироваться в качестве наблюдателя NSTextDidEndEditingNotification
(вы можете прочитать ссылку на класс NSNotificationCenter , если вы не знакомы с уведомлениями). Для этого поместите следующее в ваш класс контроллера; функция awakeFromNib
является хорошим местом для включения ее, чтобы она вызывалась при запуске вашего приложения:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(textDidEndEditing:)
name:NSTextDidEndEditingNotification
object:tableView];
Где tableView
- указатель на ваш NSTableView
объект. Затем просто реализуйте метод следующим образом:
- (void)textDidEndEditing:(NSNotification *)aNotification
{
// Do what you want here
}
Не забудьте удалить себя в качестве наблюдателя при освобождении:
- (void)dealloc
{
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self];
}
Причина, по которой вы устанавливаете объект, который вы наблюдаете, как экземпляр NSTableView
(а не саму ячейку) в том, что под крышкой, когда вы редактируете ячейку таблицы, ячейка, с которой вы имеете дело не редактируется напрямую; это окно (или пользовательский) редактор полей. Когда редактирование заканчивается, редактор полей затем передает новое значение для этой ячейки в табличное представление. Однако в табличном представлении будет опубликовано уведомление о том, что ячейка закончила редактирование.