Вопрос

В IB легко привязать метку или текстовое поле к keyPath некоторого контроллера.

NSDockTile (доступный через [[NSApp dockTile] setBadgeLabel: @ " 123 "]) не появляется в IB, и я не могу понять, как программно связать его " badgeLabel " свойство, как вы можете связать метку / текстовое поле / столбец таблицы.

Есть идеи?

Это было полезно?

Решение

NSDockTile не имеет никаких привязок, поэтому вашему контроллеру придется обновлять плитку док-станции вручную. Вы можете сделать это, используя KVO, который будет иметь тот же эффект, что и его привязка.

Создать контекст как глобальный:


static void* MyContext=(void*)@"MyContext";

Затем, в вашем методе init:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

Затем вам нужно реализовать этот метод, чтобы получать уведомления об изменениях в пути к ключу:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Обязательно удалите наблюдателя, когда объект контроллера исчезнет.

Другие советы

Если NSDockTile поддерживает привязки, вы можете использовать метод bind: toObject: withKeyPath: options: , чтобы установить привязки для свойства badgeLabel. Проверьте документацию для деталей, какие аргументы использовать. Если это не работает, вы можете либо реализовать наблюдение значения ключа в своем классе контроллера и обновлять метку при каждом изменении значения, либо даже переопределить NSDockTile для создания подкласса, совместимого с привязками.

Я пробовал множество вариантов bind: toObject: withKeyPath: options: в NSDockTile, на контроллере, в источнике данных. Я не могу понять комбинацию, которая работает. Альтернативно, есть ли способ иметь объект BatchController, который может быть связан с источником данных, и он затем обновляет значок? Как взять объект NSO и сделать его привязываемым?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top