2013-05-05 2 views
3

Я попробовал этот класснагрузки UIView с СИБ и UIView класса

https://github.com/autresphere/ASDepthModal

я хочу, чтобы это всплывающее окно, как это делает, но я хочу, чтобы иметь возможность установить метки программно, так как мне нужно, чтобы меняется в зависимости от того, в какой день. Я использую раскадровку, поэтому я создал .xib и uiview.h и uiview.m. В моей главной UIViewController я есть:

xibContents = [[NSBundle mainBundle] loadNibNamed:@".xib" owner:self options:nil]; 
testView = [xibContents lastObject]; 

в моем .xib я установить владельца файла моего класса UIView, это создает проблему: NSUnknownKeyException Когда я установить uiiew внутри моего .xib мой класс UIView приложение будет загружаться, и я могу открыть его так, как должен, но я не могу программно изменить состояние метки? Я здесь полностью утерян!

ответ

2

На самом деле получил эту работу. Я принял неправильный подход. Мне было проще просто создать представление и заполнить его фоновым изображением и ярлыками при нажатии кнопки. было бы просто сделать это в дизайнере пользовательского интерфейса, но на самом деле это было не так сложно.

Спасибо людям, которые мне помогли :)

1

Владелец файла должен быть контроллером вида, а не самим представлением. Представление может иметь метки на этикетках. Представление должно быть настроено на ваш пользовательский класс в вашем nib.

3

Как правило, UIViews не имеют доступа к IBOutlets. Предполагаемые xib для Apple предназначены только для UIViewControllers.

Однако, вы можете загрузить вид из XIb двух способов:

1) Создать дополнительный XIB для использования в вашем UIViewController. Установите владельца файла на свой контроллер представления и имя класса в свой пользовательский класс представления. В построителе интерфейса это находится под «пользовательским классом». Вы можете установить представление как IBOutlet, и iOS создаст экземпляр вашего пользовательского класса, когда ваш UIViewController загрузит xib и станет владельцем (например, вы попытались сделать это выше, но только из класса контроллера).

2) Загрузите XIB в классе UIView, и установить себя к полученному объекту:

- (id)init { 
    self = [super initWithFrame:CGRectMake(0, 0, 1024, 352)]; 

    if (self) { 
     NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"TCSNumberKeyPad" owner:self options:nil]; 
     [[nib objectAtIndex:0] setFrame:CGRectMake(0, 0, 1024, 352)]; 
     self = [nib objectAtIndex:0]; 
    } 

    return self; 
} 

в любом случае, вам нужно будет получить этикетку с помощью кода, а не свойствами IBOutlet. Вы можете найти ярлык в свойстве подвидов:

UILabel* myLabel = [self.subviews objectAtIndex:0];

+0

Я не понимаю, как это реализовать? У меня есть один ViewController, который построил интерфейс в моей главной раскадровке. У меня есть один класс UIView, который должен контролировать мои 2 .xib? Один .xib - главный экран и другой xib для управления моими ярлыками? – 4FunAndProfit

Смежные вопросы