Я знаком с большей частью процесса создания XIB для моего собственного подкласса UIView, но не все у меня работает должным образом - в основном это связано с подключением IBOutlets. Я могу заставить их работать окольными путями.
Моя установка такова:
- У меня есть MyClass.h и MyClass.m. У них есть IBOutlets для UIView (называемого представлением) и UILabel (называемого myLabel). Я добавил свойство «просмотр», потому что некоторые примеры в Интернете, казалось, предполагали, что вам это нужно, и это фактически решило проблему, из-за которой я получал сбой, потому что не мог найти свойство просмотра, я думаю, даже не в родительском классе UIView .
- У меня есть XIB-файл с именем MyClass.xib, а его пользовательский класс File Owner — MyClass, который предварительно заполнен правильно после того, как мои .h и .m для этого класса существовали.
Мой метод инициализации - это то место, где у меня возникают проблемы.
Я попытался использовать метод «loadNibNamed» основного пакета NSBundle и установить владельца как «я», надеясь, что я создам экземпляр представления, и он автоматически сопоставит свои выходы с выходами в моем классе (я знаю как это сделать, и я осторожен с этим). Затем я подумал, что хочу сделать «я» равным подвиду с индексом 0 в этом наконечнике, а не делать
self = [super init];
или что-то в этом роде.
Я чувствую, что я делаю что-то неправильно здесь, но примеры в Интернете имели аналогичные вещи, происходящие в методе init, но они присваивают это подпредставление 0 свойству представления и добавляют его как дочерний - но разве это не в общей сложности два экземпляра MyClass? Один по существу не связан с IBOutlets, содержащий дочерний экземпляр MyClass, созданный с помощью loadNibNamed? Или, в лучшем случае, это не экземпляр MyClass с дополнительным промежуточным UIView, содержащим все IBOutlets, которые я изначально хотел сделать прямыми дочерними элементами MyClass? Это немного раздражает, когда дело доходит до таких вещей, как instanceOfMyClass.frame.size.width, поскольку он возвращает 0, когда представленный дочерний UIView возвращает реальный размер кадра, который я искал.
Что я делаю неправильно, так это то, что я возился с loadNibNamed внутри метода инициализации? Должен ли я делать что-то подобное?
MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];
Или вот так?
MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0];
Заранее спасибо за любую помощь.
MyClass
, что, вероятно, не то, что вам нужно. К сожалению, я не знаю, что здесь предложить, потому что использование вамиMyClass
неясно. Как вы собираетесь использоватьMyClass
? В частности, что вы делали, чтобы увидеть сбой, потому что он не смог найти свойство просмотра? Это заставляет меня подозревать, что у вас есть некоторая путаница между представлениями и контроллерами. - person Jonah   schedule 23.11.2012