Как связать пользовательский вид nib с подклассом NSVIew

У меня есть простое требование. При нажатии кнопки + я пытаюсь добавить пользовательский вид в файл SplitView.

Я создал класс MyCustomView, который является подклассом NSView.

В файле пера приложений у меня есть пользовательский вид, который содержит кнопки и т.д.

Теперь, как выделить новый MyCustomView каждый раз?

Есть ли пример для этого?

Я надеюсь что-то вроде

MyCustomView *v1 = [[MyCustomView alloc] init];

..
..
[splitView addSubView:v1];
[splitView addSubView:v2];

...

Пожалуйста помоги


person user970251    schedule 01.11.2011    source источник


Ответы (1)


Трудно точно сказать, что вы описываете, основываясь на вашем описании, но давайте посмотрим, понимаю ли я вас. Вы хотите добавить «копию» вашей пользовательской сборки представления в разделенное представление каждый раз, когда нажимается «+», верно?

Абсолютно лучший способ сделать это — поместить пользовательскую сборку представления, которая будет скопирована («прототип») в свой собственный xib. Для каждого объекта, который вы хотите представить, вы создадите новую копию из xib и передадите ее какому-либо владельцу, а затем добавите ее в какое-то родительское представление (разделенное представление в вашем случае... нечетно для неограниченного количества представлений, но я не хватает подробностей, чтобы сказать обратное).

Так. В современном мире Cocoa такая сборка представления, скорее всего, должна иметь собственный контроллер представления (NSViewController). Это упрощает вам задачу, поскольку владельцем файла xib будет экземпляр вашего MyCustomViewController, чей -view связан с основным представлением контейнера в xib (ваше пользовательское представление со всеми его подпредставлениями) и чей -representedObject установлен на любую модель объект, который представляет ваш пользовательский вид. Затем ваше приложение будет поддерживать список (возможно, массив или словарь) всех контроллеров представления для объектов модели. См. этот SO-вопрос/ответ для краткого изложения того, как загружать из nibs/xibs.

Это в основном то, как NSCollectionView работает (хотя все представления должны быть одинакового размера - это может не сработать для вас). В этом случае представление коллекции соответствует вашему разделенному представлению; NSCollectionViewItem соответствует вашему MyCustomViewController (и фактически в 10.5 и выше NSCollectionViewItem является подклассом NSViewController); ваш пользовательский вид - это основной вид элемента представления коллекции. Для каждого объекта модели в своей коллекции он создает экземпляр NSCollectionViewItem и загружает прототип представления из xib (в идеале, но это необязательно) и использует его для установки представления элемента, затем устанавливает представленный объект элемента (объект модели) .

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

person Joshua Nozzi    schedule 01.11.2011
comment
Если я создам новый перо Mynib и создам в нем настраиваемый вид. Теперь я должен добавить объект ViewController в xib? - person user970251; 01.11.2011
comment
Вы читали документацию, связанную с вопросом SO, на который я ссылался в своем ответе? Это описано в документации и полудюжине очень хороших учебных пособий в Интернете. Вкратце: имя класса владельца файла xib должно быть установлено на имя вашего пользовательского контроллера представления. - person Joshua Nozzi; 01.11.2011
comment
Вы упоминаете что-то вроде - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {MyViewController *viewController = [[NSViewController alloc] initWithNibName:@testview bundle:nil]; [NSBundle loadNibNamed:@testview owner:viewController]; NSView *newView = [представление viewController]; } Я новый какао, - person user970251; 01.11.2011