Вы , вероятно, не будут использовать nib / xib для создания многоразового представления 'control'. iOS сильно отличается от того, к чему вы привыкли, скажем, Java или .NET. Для некоторых видов представлений вы создадите xib и контроллер / класс, который его поддерживает - UITableViewCell является примером этого.
Хотел бы я дать вам пошаговое руководство, как добиться того, что вы пытаетесь сделать, но я не могу, потому что у меня недостаточно информации о том, что вы на самом деле пытаетесь сделать. На сайте для разработчиков Apple есть несколько замечательных руководств, которые знакомят вас с взаимодействиями событий View / Controller / Touch, но сайт не отвечает прямо сейчас (я полагаю, из-за выпуска видео WWDC). Кстати, просмотр видео с WWDC 2010 - это еще один отличный способ узнать о том, чего вы пытаетесь достичь, особенно сессии UIKit.
Вы не собираетесь создавать «элементы управления», как вы, вероятно, привыкли к ним, но пользовательские объекты-потомки UIView и пользовательские объекты-потомки UIViewController. В моих проектах я обнаружил очень очень несколько сценариев, в которых создание многоразового UIView было полезным (кроме UITableViewCells). Подавляющее большинство кода многократного использования в проекте iOS - это ViewControllers. Вы будете выставлять события с помощью делегирования - ваш контроллер определит делегата, который будет реализован другим объектом, и получит вызовы методов от вашего контроллера для обработки того, что было делегировано. Опять же, руководства Apple и видео WWDC объясняют это очень хорошо.
Вот пример многоразового контроллера и его использования:
MyEntityViewController.m
- (id)initWithEntity:(EntityFoo *)theEntity inEditMode:(BOOL)inEditMode {
self = [super initWithNibNamed:@"EntityFooView" bundle:nil];
if(self) {
//retain entity somewhere
//dont setup view in here!
}
return self;
}
- (void)viewDidLoad {
//setup view in here. This ensures compatibility with standalone operation
}
RootViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
EntityViewController *evc = [[EntityViewController alloc] initWithEntity:self.someEntity inEditMode:NO];
[self.view addSubview:evc.view];
//You MUST call this method, the framework will not call it on sub-controllers
[evc viewDidLoad];
self.entityViewController = evc;
[evc release];
}
Это не полная реализация, так как ваш опыт и инфраструктура растут, вы найдете шаблон уведомления (подсказка) субконтроллеров событий о событиях в главном контроллере представления. Я настоятельно рекомендую вам посмотреть видео с WWDC 2011, если у вас есть к ним доступ, поскольку в следующей ОС что-то будет иметь отношение к этой теме.