2013-09-21 6 views
12

Мне не хватает чего-то важного. Не совсем уверен, что это такое.iOS: Пользовательский вид с xib

У меня есть пользовательский вид подкласса. Я создал файл xib для разработки его макета. Я подключил четыре кнопки в качестве выходов к классу.

#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; 

Я тогда

#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; 
} 

Я затем добавить вид на другой контроллер с помощью: initWithFrame.

Когда я пытаюсь войти в журнал btn1, чтобы узнать, существует ли он, он печатает null. Я предполагаю, что это потому, что я не инициализировал его, но я не совсем уверен, как это сделать, учитывая, что если я создам его как новую кнопку, все вещи в xib будут бесполезны?

ответ

13

Edited Ответ:

Ой, подождите, вы пытаетесь инициализировать представление в пределах своего класса? Не делай этого.

В интерфейсе 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

я не совсем понимаю. Как создать экземпляр этого представления с другого контроллера? С пользовательским xib. – JoshDG

+0

Чтобы создать представление в другом контроллере представления, используйте код под заголовком ** Original Response **. – ArtSabintsev

+0

А, это работает. Как начать инициализацию пользовательского представления? – JoshDG

0

Вы правы, что вам не нужно запускать кнопки с помощью XIB. Попробуйте использовать initWithNibName вместо loadNibNamed.

+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) 
Смежные вопросы