Я знаком с большинством процессов создания XIB для моего собственного подкласса UIView, но не все работает правильно для меня - это в основном связано с привязкой IBOutlets. Я могу заставить их работать в том, что кажется окольным путем.
Моя настройка такова:
- У меня есть MyClass.h и MyClass.m. У них есть IBOutlets для UIView (называемый view) и UILabel (называемый myLabel). Я добавил свойство "view", потому что некоторые примеры в Интернете, казалось, подсказывали вам, что вам это нужно, и он фактически решил проблему, когда я получал сбой, потому что он не смог найти свойство view, я думаю, что даже в родительском классе UIView.
- У меня есть XIB файл с именем MyClass.xib, а его собственный пользовательский класс File Owner - MyClass, который предварительно заполнен после моих .h и .m для этого класса.
Мой метод init - это то, где у меня возникают проблемы.
Я попытался использовать NSBundle mainBundle 'loadNibNamed' метод и установить владельца на "я", надеясь, что я создам экземпляр представления, и он автоматически получит свои выходные данные, соответствующие тем, которые были в моем классе (Я знаю, как это сделать, и я осторожен с этим). Затем я подумал, что хочу сделать "я" равным подчиненному в индексе 0 в этом nib, вместо того, чтобы делать
self = [super init];
или что-то в этом роде.
Я чувствую, что я делаю что-то неправильно здесь, но примеры в Интернете имеют похожие вещи в методе init, но они присваивают этому subview 0 свойству вида и добавляют его как дочерний элемент - но это не то в общей сложности два экземпляра MyClass? Один по существу несвязанный с IBOutlets, содержащий дочерний MyClass, созданный с помощью loadNibNamed? Или, в лучшем случае, разве это не экземпляр MyClass с дополнительным промежуточным UIView, содержащим все IBOutlets, которые я первоначально хотел как прямые дети MyClass? Это вызывает небольшое раздражение, когда дело касается таких вещей, как instanceOfMyClass.frame.size.width, поскольку он возвращает 0, когда введенный дочерний UIView возвращает реальный размер кадра, который я искал.
Это то, что я делаю неправильно, что я возился с loadNibNamed внутри метода init? Должен ли я делать что-то подобное?
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];
Спасибо за любую помощь.