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, чтобы увидеть, существует ли он, он печатает нуль. Я предполагаю, что это потому, что я не инициализировал его, но я не совсем уверен, как это сделать, учитывая, что если я создам его как новую кнопку, все вещи в xib будут бесполезны?

Ответ 1

Отредактированный ответ:

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

В 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];

Ответ 2

Это должно быть просто:

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

Ответ 3

Для Swift (2):

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

Ответ 4

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