所以如果你想在IB设计你需要做更多的腿部工作。
首先,我们需要一些东西来包含我们的控制,所以我们需要的NSObject
子类来充当控制器,并将其命名为明智的。 (比进myWidget更好)
@interface MyWidget : UIView
我们的基本出发帆布奠定我们的组件上,我们需要一个UIView
即IB可以得到一个处理和使用。添加到您的头
@property (nonatomic, retain) IBOutlet UIView *view;
然后给这个伊娃一个getter/setter和做内存管理中的.m
@synthesize view = _view;
...
- (void)dealloc;
{
[_view release];
[super dealloc];
}
现在创建一个单一视图笔尖启动和设置File's Owner
到MyWidget
。您现在应该能够从File's Owner
ctrl
+ click
并拖动到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类被实例化时,它会将自己挂钩到nib。在这一点上,您回到了您通常如何使用标准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