Ответ 1
Вы , вероятно, не будете использовать nib/xib для создания "управления" повторного использования. 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, если у вас есть к ним доступ, поскольку в следующей ОС есть что-то, что связано с этим предметом.