Так что, если вы хотите проектировать в IB, вам нужно проделать немного больше работы.
Для начала нам нужно что-то, чтобы содержать наши элементы управления и действовать как контроллер, поэтому нам нужен подкласс NSObject
и назовите это чем-то разумным.(Лучше, чем MyWidget)
@interface MyWidget : UIView
для того, чтобы наш базовый начальный холст лежал на наших компонентах, нам понадобится UIView
, с которым IB может справиться и использовать.Добавьте это в свой заголовок
@property (nonatomic, retain) IBOutlet UIView *view;
Затем дайте этому ивару метод получения / установки и выполните управление памятью в .m
@synthesize view = _view;
...
- (void)dealloc;
{
[_view release];
[super dealloc];
}
Теперь создайте наконечник с одним представлением, чтобы начатьи установите File's Owner
на MyWidget
.Теперь вы сможете ctrl
+ click
и перетащить из File's Owner
в UIView
объект и выбрать view
.Таким образом, в этот момент наш кончик знает, как подключиться к нашему MyWidget
классу, но наш MyWidget
класс не знает о кончике.
В MyWidget.m
нам нужно указать классу использовать перои в - (id)initWithFrame:(CGRect)frame;
, и в - (id)initWithCoder:(NSCoder *)aDecoder;
, чтобы мы могли создать экземпляр класса в коде или с помощью IB.
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self loadView];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder;
{
self = [super initWithCoder:aDecoder];
if (self) {
[self loadView];
}
return self;
}
- (void)loadView;
{
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
[self addSubview:self.view];
}
Теперь, когда создается экземпляр класса out, он подключается к перу.К этому моменту вы вернулись к тому, как вы обычно работаете со стандартным UIViewController
, например, добавьте что-то в xib, затем подключите его к контроллеру и используйте его.
В целом хорошая начальная точка будет выглядеть так...
MyWidget.h
#import <UIKit/UIKit.h>
@interface MyWidget : UIView
@property (nonatomic, retain) IBOutlet UIView *view;
@end
MyWidget.m
#import "MyWidget.h"
@interface MyWidget ()
- (void)loadView;
@end
@implementation MyWidget
@synthesize view = _view;
- (void)dealloc
{
[_view release];
[super dealloc];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self loadView];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder;
{
self = [super initWithCoder:aDecoder];
if (self) {
[self loadView];
}
return self;
}
- (void)loadView;
{
// MyWidget is the name of the xib as well
[[NSBundle mainBundle] loadNibNamed:@"MyWidget" owner:self options:nil];
[self addSubview:self.view];
}
@end