В AngularJS мы должны думать не с точки зрения нашего взгляда, а с точки зрения нашей модели.
Итак, вы должны спросить себя, что генерирует контент внутри вашего элемента. Если он динамический, он исходит от вашей модели. Итак, к какому свойству модели вы можете обратиться, чтобы получить необходимую информацию?
Вот пример ngRepeat:
<div ng-show="items.length > 0">
<div ng-repeat="item in items">
<!-- ... -->
</div>
</div>
NSTextFieldCell
наследуется от NSCell
(ну, технически от NSActionCell
, который наследуется от NSCell
). Класс NSCell
используется для (из docs ):
Класс 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
(а не саму ячейку), заключается в том, что при редактировании ячейки в таблице скрывается та ячейка, которая вы имеете дело, не редактируется напрямую; это оконный (или настраиваемый) редактор поля. Когда редактирование заканчивается, редактор поля передает новое значение для этой ячейки в представление таблицы. Однако в табличном представлении будет опубликовано уведомление о том, что редактирование ячейки завершено.
Реализуйте метод tableView:setObjectValue:forTableColumn:row:
в протоколе NSTableViewDataSource. Поместите его рядом с уже реализованным методом tableView:objectValueForTableColumn:row:
.
- (void)tableView:(NSTableView *)aTableView
setObjectValue:(id)anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(NSInteger)rowIndex
{
[mutableArrayWithStrings replaceObjectAtIndex:rowIndex withObject:anObject];
}