IBPlugin: Добавление дополнительных объектов при перетаскивании из IB Library - PullRequest
0 голосов
/ 25 сентября 2010

У меня есть класс представления списка , который так же, как NSCollectionView , требует дополнительного элемента прототипа и представления прототипа для любого использования.При удалении NSCollectionView из библиотеки в Интерфейсном Разработчике эти два вспомогательных элемента создаются автоматически.Однако я не смог найти ни одного официального документа Apple, касающегося этого варианта использования (описывающего, как это делается).

Копая руководства Apple Dev, я смог найти " ibDidAddToDesignableDocument :".
С помощью следующего кода мне удалось получить мои вспомогательные элементы, созданные по капле из библиотеки:

- (void)ibDidAddToDesignableDocument:(IBDocument *)document {
    [super ibDidAddToDesignableDocument:document];

    NSView *prototypeView = [[[NSView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 300, 65.0)] autorelease];
    DLListViewItem *prototypeViewItem = [[[DLListViewItem alloc] initWithNibName:nil bundle:nil] autorelease];

    [document addObject:prototypeViewItem toParent:nil];
    [document addObject:prototypeView toParent:nil];

    [document connectOutlet:@"view" ofSourceObject:prototypeViewItem toDestinationObject:prototypeView];
    [document connectOutlet:@"listView" ofSourceObject:prototypeViewItem toDestinationObject:self];
    [document connectOutlet:@"prototypeItem" ofSourceObject:self toDestinationObject:prototypeViewItem];
}

Однако…

IB добавляет эти вспомогательные элементы дляNSCollectionView только для фактического начального перетаскивания из библиотеки , а не для любого другого вызова «ibDidAddToDesignableDocument:», например, при встраивании, копировании или дублировании элемента.(хотя мой метод и на всех)

Это заставляет меня задуматься, использует ли Apple "ibDidAddToDesignableDocument:" для этого, и я нахожусь на правильном пути с этим вообще.

Как правильно имитировать это?Я с трудом пытаюсь различить разные контексты для "ibDidAddToDesignableDocument:".Кто-нибудь успешно делал это?
К сожалению, ни Google, ни Google Code, ни GitHub, ни документация не выявили ничего полезного, поэтому мне здесь крайне нужна помощь.: (

Заранее спасибо!

Редактировать: О, отлично, этот вопрос только что принес мне значок с камышом, да! Не.
На самом деле я больше на полезные ответы, но спасибов любом случае;)

1 Ответ

0 голосов
/ 04 октября 2010

Я боролся с этим на плагине, который я сделал сам некоторое время назад. В моем случае я смог проверить свойство объекта, чтобы увидеть, был ли он уже инициализирован, и пропустить добавление вспомогательных объектов в этом случае. Я считаю, что BWToolkit использует некоторые внутренние проверки, которые похожи. Не могли бы вы проверить свойство вашего объекта 'prototypeItem', чтобы увидеть, нужно ли вам пропустить создание ваших вспомогательных объектов?

...