Привязка пользовательского NSView: требует ли это создания IBPlugin?
Я создал подкласс 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?. Это просто кажется излишним для пользовательского представления, которое я не планирую повторно использовать.
Ответы
Ответ 1
Ответ на заголовок: Нет, вы можете связать пользовательский вид без подключаемого модуля IB (выполнив его в коде).
Ответьте на вопрос в вопросе: да, вам нужно подключить модуль IB, чтобы выставить привязку в IB.
Ваш код не запускается внутри Interface Builder, если вы не поместили его в Interface Builder, и это сообщение exposeBinding:
- ваш код. Поэтому вам нужно поместить его в Interface Builder. Это означает, что вы пишете подключаемый модуль IB.
Кроме того, модули IB не такие же, как у старых палитр IB. Плагины требуют IB 3 и их намного проще создавать. Палитры требуют IB 2 и были болезненны для создания.
Ответ 2
Я просто привязал объект контроллера к объекту моего представления, используя другое стандартное связывание (скажем, toolTip), а затем отредактировал XIB файл с помощью текстового редактора и вручную изменил XML.
После этого привязка работает правильно и даже правильно отображается в построителе интерфейсов для загрузки!
Ответ 3
Нет, вы можете использовать метод
bind:toObject:withKeyPath:options:
чтобы установить привязку программно. Я считаю, что вам нужно создать палитру IB, чтобы заставить привязки появляться в Interface Builder, но для одноразового класса я не собираюсь повторно использовать, я никогда не беспокоился.
Ответ 4
Если вам удастся вручную выполнить привязки, вы сэкономите много времени. Создание пользовательских палитр IB - это большая работа по сравнению с несколькими строками кода ручной привязки. Но если ваши потребности требуют пользовательской палитры IB, я бы начал с рассмотрения того, что потребует подкласс NSView, с кодировкой. Отличное место для поиска - сайт Crawford по привязкам:
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html
Я использовал его много за последние пару лет, он многое помог с моими пользовательскими объектами палитры IB и связанными проблемами в целом. На его сайте есть пример, в котором подробно описывается пользовательский NSView с пользовательскими привязками.
Что-то еще следует отметить, так это то, что ваш пользовательский вид также должен работать в среде Interface Builder. Есть несколько небольших исправлений, которые необходимо ввести в свой код привязки в свой пользовательский объект NSView, чтобы он правильно функционировал и связывался в Interface Builder. Эти данные также отмечены на сайте Crawford:
http://homepage.mac.com/mmalc/CocoaExamples/controllers.html#ibBindings