Делегат NSTextFieldCell?

В AngularJS мы должны думать не с точки зрения нашего взгляда, а с точки зрения нашей модели.

Итак, вы должны спросить себя, что генерирует контент внутри вашего элемента. Если он динамический, он исходит от вашей модели. Итак, к какому свойству модели вы можете обратиться, чтобы получить необходимую информацию?

Вот пример ngRepeat:

<div ng-show="items.length > 0">
  <div ng-repeat="item in items">
    <!-- ... -->
  </div>
</div>
10
задан Walker 27 May 2009 в 21:06
поделиться

2 ответа

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 (а не саму ячейку), заключается в том, что при редактировании ячейки в таблице скрывается та ячейка, которая вы имеете дело, не редактируется напрямую; это оконный (или настраиваемый) редактор поля. Когда редактирование заканчивается, редактор поля передает новое значение для этой ячейки в представление таблицы. Однако в табличном представлении будет опубликовано уведомление о том, что редактирование ячейки завершено.

15
ответ дан 3 December 2019 в 22:38
поделиться

Реализуйте метод 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];
}
0
ответ дан 3 December 2019 в 22:38
поделиться