IBで設計したい場合は、もう少し足を運ぶ必要があります。
開始するには、コントロールを格納してコントローラとして動作させるために、NSObject
のサブクラスが必要です。それを賢明なものと呼んでください。私たちに私たちのコンポーネントを築くために、私たちの基本的な出発キャンバス
@interface MyWidget : UIView
(はMyWidgetよりベター)IBは、へのハンドルを取得して使用することができますUIView
が必要になります。
@property (nonatomic, retain) IBOutlet UIView *view;
は次に、このIVARにゲッター/セッターを与え、あなたのヘッダにこれを追加し、.M今
@synthesize view = _view;
...
- (void)dealloc;
{
[_view release];
[super dealloc];
}
にメモリ管理を行う開始するために単一のビューでペン先を作成し、File's Owner
を設定MyWidget
。今度はctrl
+ click
になり、File's Owner
オブジェクトからUIView
オブジェクトにドラッグしてview
をドラッグする必要があります。だからこの時点で私たちのペン先は、MyWidget
クラスに接続する方法を知っていますが、私たちのMyWidget
クラスはペン先について知りません。
- (id)initWithFrame:(CGRect)frame;
と- (id)initWithCoder:(NSCoder *)aDecoder;
の両方でnibを使用するようにクラスに指示する必要があるため、コードでクラスをインスタンス化するか、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