Я создам собственный виджет, который хотел бы использовать в нескольких перьях. Итак, я создаю новое перо вида Screen3, добавляю несколько кнопок и теперь хочу свой виджет UIAwesomeSauce.
Если я просто добавлю представление, а затем изменю идентификатор класса, он не t получить подэлементы из пера UIAwesomeSauce. То же самое, если я перейду в библиотеку и переключусь на классы. Кажется, только UIViewController имеет поле для «Загрузить из пера», что было бы прекрасно.
Я знаю, что могу загрузить перо UIAwesomeSauce из кода, получить объекты верхнего уровня и разместить его вручную. Но суть IB в том, что вам не нужно помещать что-то в код. Еще лучше было бы, если бы я мог заставить UIAwesomeSauce отображаться в самом списке библиотек.
РЕШЕНО - Nimrod - ПРОЧИТАЙТЕ ПОЯСНЕНИЯ И КОД
В любом случае, черт, это здорово. Теперь я могу создавать свои собственные классы виджетов для глупых крутых вещей. Сделайте FileOwner своего UI-пера своим классом, и в нем просто используйте обычный UIView со всеми вашими вещами. (Единственное представление в пике виджета не может быть самим классом, иначе вы получите рекурсию в initWithCoder. Затем в пере, которое вы хотите использовать, создайте ванильный UIView и измените его класс. Вы не сможете на самом деле увидеть виджет внутри этого квадрата, но сделайте это.
Self теперь является пустым представлением, а tMyActualSelf - единственным представлением, с которым вы работали в другом кончике. Ура!
- (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;
}