Какао Дизайн: Как выделить текущий отдел сотрудника в NSCollectionView? - PullRequest
0 голосов
/ 15 апреля 2011

У меня есть база данных с основными данными с записями, как в примере со многими сотрудниками: сотрудник может принадлежать к отделу.В отделе много сотрудников.У меня есть NSTableView (при поддержке NSArrayController) со всеми сотрудниками.У меня есть NSCollectionView (поддерживаемый NSArrayController установлен на selection.possibleDepartments), который показывает мне возможные отделы для выбранного сотрудника.

*DDEmployee               
 name
 image
 -----
 possibleDepartments <<------ 
 selectedDepartment <<--     |
                        |    |
*DDDepartment           |    |
 name                   |    |
 -----                  |    |
 employees          <---     |
 possibleEmployees <<--------

Я хочу выделить отдел, в котором сотрудник в настоящее время находится в

Просто так?

Как узнать, какой отдел выбран в данный момент?Я создал категорию класса отдела (DDDepartment), которая имеет "- (BOOL) isThisTheSelectedDepartment".В этой функции я вызываю делегат приложения, чтобы получить основной контроллер массива.Контроллер основного массива дает мне выбранного сотрудника.Я спрашиваю выбранного сотрудника, является ли это его отделом.Изображение немного, и его скрытое свойство привязано к представляемому объекту Object.isThisTheSelectedDepartment и отменено.Это не обновляет NSCollectionView (очевидно: P). Есть ли способ сделать это с привязками?

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2011

Если вы хотите сделать это с привязками, вы можете добавить NSObjectController в ваше перо. Затем на контроллере объекта свяжите его содержимое с выбором в контроллере массива сотрудника с помощью keypath @ "selectedDepartment". Этот контроллер объекта всегда будет содержать отдел выбранного сотрудника.

Для DDDepartment добавить свойство BOOL "isSelected" к нему.

Создать подкласс NSObjectController. Установите NSObjectController, который вы создали в части 1, чтобы иметь подкласс для своего класса. Теперь в переопределении подкласса - (void) setContent: (id) должно быть:

- (void)setContent:(id)content
{
   [[self content] setIsSelected:NO];  // clear the flag on the current selection
   [content setIsSelected:YES];  // set the flag on the new selection

   [super setContent:content];
}

Наконец, измените скрытое связывание, чтобы связать его со свойством isSelected вместо вашего метода isThisTheSelectedDepartment. Это должно позаботиться обо всем за вас и привести к тому, что выбор отдела будет меняться всякий раз, когда вы выбираете сотрудника или меняете отдел сотрудника.

...