Привязка пользовательского NSView:Требуется ли создание IBPlugin?

StackOverflow https://stackoverflow.com/questions/605721

Вопрос

Я создал подкласс NSView для рисования изображения в виде шаблона:

@interface CePatternView : NSView
{
    NSImage*    image;
    id      observableObjectForImage;
    NSString*   keyPathForImage;
}

@end

Я реализовал следующее, чтобы предоставить привязки:

+ (void)initialize
{
    // Expose the "image" binding to IB.
    [self exposeBinding:@"image"];  
}

- (Class)valueClassForBinding:(NSString *)binding
{
    if([binding isEqualToString:@"image"])
        return [NSImage class];
    return nil; // Unknown binding
}

К сожалению, изображение привязка не отображается в Interface Builder.

Действительно ли мне нужно создавать IBPlugin для предоставления привязок в Interface Builder? Это кажется излишним для пользовательского представления, которое я не планирую использовать повторно.

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

Решение

Ответ на заголовок:Нет, вы можете привязать пользовательское представление без подключаемого модуля IB (сделав это в коде).
Ответ на вопрос в теле вопроса:Да, вам нужен плагин IB, чтобы предоставить привязку в IB.

Ваш код не запускается внутри Interface Builder, если вы не поместите его в Interface Builder, и это exposeBinding: сообщение — это ваш код.Поэтому вам нужно поместить его в Interface Builder.Это означает написание плагина IB.

Кроме того, плагины IB отличаются от старых палитр IB.Плагины требуют IB 3, и их гораздо проще создавать.Палитры требуют IB 2, и создавать их было сложно.

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

Я просто привязал свой объект контроллера к своему объекту представления, используя другую стандартную привязку (скажем, всплывающую подсказку), затем отредактировал файл XIB с помощью текстового редактора и изменил XML вручную.

После этого привязка работает правильно и даже корректно отображается в Interface Builder при загрузке!

Нет, вы можете использовать метод

bind:toObject:withKeyPath:options:

чтобы установить привязку программно.Я считаю, что вам нужно создать палитру IB, чтобы привязки отображались в Interface Builder, но я никогда не беспокоился о одноразовом классе, который я не собираюсь использовать повторно.

Если вам удастся выполнить привязку вручную, вы сэкономите много времени.Создание пользовательских палитр IB — это большая работа по сравнению с несколькими строками кода привязки вручную.Но если вашим потребностям требуется специальная палитра IB, я бы начал с рассмотрения того, что потребуется подклассу NSView с точки зрения кодирования.Отличным местом для начала поиска является сайт Кроуфорда, посвященный креплениям:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

Я часто использовал его за последние пару лет, он очень помог мне с моими собственными объектами палитры IB и с проблемами привязки в целом.На его сайте есть пример, в котором подробно описываются пользовательские NSView с пользовательскими привязками.

Еще следует отметить, что ваше пользовательское представление также должно будет работать в среде Interface Builder.Есть несколько небольших исправлений, которые необходимо внести в код привязок вашего пользовательского объекта NSView, чтобы он правильно функционировал и привязывался в Interface Builder.Эти подробности также указаны на сайте Кроуфорда:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#ibBindings

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