Я создаю пользовательский виджет, который я хотел бы использовать в нескольких наконечках. Поэтому я создаю новый вид nib Screen3, добавляю несколько кнопок и теперь хочу свой виджет UIAwesomeSauce.
Если я просто добавлю представление, а затем изменим идентификатор класса, он не получит подэлементы из UIAwesomeSauce nib. То же самое, если я пойду в библиотеку и перейду к классам. Кажется, что только UIViewController имеет поле "Load from nib", которое было бы красивым.
Я знаю, что могу загрузить UIAwesomeSauce nib из кода, получить объекты верхнего уровня и поместить его вручную. Но точка IB такова, что вам не нужно размещать вещи в коде. Еще лучше было бы, если бы я мог заставить UIAwesomeSauce появляться в самом списке библиотеки.
РЕШЕННО - Нимрод - ПРОЧИТАЙТЕ ДЛЯ ОБЪЯСНЕНИЯ И КОДА
В любом случае, dood, это здорово. Теперь я могу сделать свои собственные классы виджетов для увлекательных вещей. Сделайте FileOwner вашего UI-ником своего класса, и в нем есть обычный UIView со всеми вашими вещами. (Единственный вид в виджетах ниб не может быть самим классом, или вы получаете рекурсивную функцию в initWithCoder.) Затем в nib вы хотите использовать его, сделайте ванильный UIView и измените его класс. Вы не сможете увидеть виджет внутри этого квадрата, но имеете дело.
Теперь я теперь представляет собой пустой вид, а tMyActualSelf - это единственный вид, в котором вы выполняли работу в другом nib. Ура!
- (id)initWithCoder:(NSCoder*)coder
{
if ((self = [super initWithCoder:coder]))
{
UIView *tMyActualSelf = nil;
// Initialization code
NSArray *tNibItems = [[NSBundle mainBundle] loadNibNamed:@"UIAwesomeSauce" owner:self options:nil];
for (id object in tNibItems)
{
if ([object isKindOfClass:[UIView class]])
tMyActualSelf = (UIView *)[object retain];
}
if( tMyActualSelf )
{
tMyActualSelf.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self addSubview:tMyActualSelf];
}
}
return self;
}