У вас есть много вариантов, в зависимости от того, как ваш класс «baseView» предназначен для использования и интеграции в ваше приложение. Непонятно, как вы собираетесь использовать этот класс - в качестве представления в подклассе UIViewController или в качестве многоразового модульного компонента, который должен быть создан несколько раз в вашем приложении для использования во многих различных контроллерах представления.
Если ваше представление должно быть единственным представлением в подклассе UIViewController, тогда Phonitive верен - свяжите его вместе с файлом .xib подкласса UIViewController и используйте viewDidLoad UIViewController для окончательной инициализации.
Но если вы хотите, чтобы ваш класс View был подкомпонентом, многократно использовавшимся в разных контроллерах представления, интегрированным либо посредством кода, либо путем включения в файл .xib для другого контроллера, тогда вам необходимо реализовать как метод initWithFrame: init, так и awakeFromNib, для обработки обоих случаев. Если ваша внутренняя инициализация всегда включает некоторые объекты из .xib, тогда в вашем initWithFrame вам нужно будет загрузить ваш .xib вручную, чтобы поддерживать классы «заказчиков», которые хотят создать ваш виджет с помощью кода. Точно так же, если файл .xib содержит ваш объект, вам нужно убедиться, что вы вызываете любую требуемую финализацию кода из awakeFromNib.
Вот пример того, как создать компонент подкласса UIView с дизайном пользовательского интерфейса в пике.
MyView.h:
@interface MyView : UIView
{
UIView *view;
UILabel *l;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (nonatomic, retain) IBOutlet UILabel *l;
MyView.m:
#import "MyView.h"
@implementation MyView
@synthesize l, view;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code.
//
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
// commenters report the next line causes infinite recursion, so removing it
// [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
- (void) dealloc
{
[l release];
[view release];
[super dealloc];
}
Вот как выглядит файл пера (за исключением того, что владельца файла нужно изменить на класс MyView).
обязательно подключите выходы просмотра и меток к владельцу файла. Вот и все! Шаблон для создания повторно используемых виджетов UIView.
Самое интересное в этой структуре заключается в том, что вы можете размещать экземпляры своего объекта MyView в других файлах пера, просто поместите UIView в нужное место / размер, а затем измените класс в инспекторе идентичности (CMD-4) на MyView, и бум, у вас есть экземпляр вашего виджета в любых представлениях, которые вы хотите! Как и в случае с объектами UIKit, вы можете реализовать протоколы делегирования, чтобы объекты, использующие ваш виджет, могли получать уведомления об интересных событиях и предоставлять данные для отображения в виджете для его настройки.
person
Bogatyr
schedule
20.02.2011