2013-09-21 7 views
12

何か重要なものがありません。それが何であるかは正確には分かりません。iOS:xibのカスタムビュー

私はカスタムビューのサブクラスを持っています。レイアウトをデザインするためにxibファイルを作成しました。クラスにアウトレットとして4つのボタンを接続しました。 initWithFrame:私はその後、

#import "MCQView.h" 

@implementation MCQView 
@synthesize btn1,btn2,btn3,btn4; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]]; 
      NSLog(@"%@", btn1); 

    return self; 
} 

を持っている私は、その後を介して別のビューコントローラにビューを追加

#import <UIKit/UIKit.h> 

@interface MCQView : UIView 
@property (strong, nonatomic) IBOutlet UIButton *btn1; 
@property (strong, nonatomic) IBOutlet UIButton *btn2; 
@property (strong, nonatomic) IBOutlet UIButton *btn3; 
@property (strong, nonatomic) IBOutlet UIButton *btn4; 

btn1をログに記録しようとすると、存在するかどうかを確認するために、nullが出力されます。私はそれを初期化していないので、そのことを前提としていますが、新しいボタンとして作成した場合、xibのすべてのものは無駄になることを考慮して、

答えて

13

編集した応答:

ああ、あなたはクラス内のビューを初期化しようとしている待つのか?それをしないでください。

Interface Builderで、MCQview.xibのクラスをMCQViewに設定して、自動的に接続を作成します。あなたがまだ持っていなければ、あなたのすべてのボタンを接続します。

その後、自動的にプロパティを編集することができます。

enter image description here

オリジナルレスポンス

私はメモリからこれをやっているが、私はあなたがそれはこのように行われるべきだと思う:

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil]; 

UIView *view = [[UIView alloc] init]; // or if it exists, MCQView *view = [[MCQView alloc] init]; 

view = (UIView *)[nib objectAtIndex:0]; // or if it exists, (MCQView *)[nib objectAtIndex:0]; 

[self.view addSubview:view]; 
+0

のためのthatsを考えます。そのビューを他のView Controllerからインスタンス化するにはどうすればよいですか?カスタムxibで。 – JoshDG

+0

別のView Controllerでビューをインスタンス化するには、** Original Response **ヘッダのコードを使用します。 – ArtSabintsev

+0

ああ、それは動作します。カスタムビューを初期化するにはどうすればよいですか? – JoshDG

0

XIBでボタンを初期化する必要はありません。 loadNibNamedの代わりにinitWithNibNameを使用してみてください。

+1

UIViewのはinitWithNibNameに応答しない: – ArtSabintsev

+0

は、いや、私はかなり理解していないビューコントローラ – JoshDG

4

これはシンプルでなければなりません。

view = [[[NSBundle mainBundle] loadNibNamed:@"MCQView" owner:self options:nil] objectAtIndex:0]
1

Swift(2)の場合:

var nib = NSBundle.mainBundle().loadNibNamed("MCQView", owner: self, options: nil) 
    view : MCQView = nib[0] as! MCQView 
    self.view.addSubview(view) 
関連する問題