Использование владельца кажется немного запутанным при загрузке пера.Похоже, что вы пытаетесь использовать представление как владельца пера и первого объекта в нем.
Пытаетесь ли вы загрузить MyView из вашего пера (т. Е. Является классом представления внутри вашего пера)файлы, определенные как MyView) или вы пытаетесь загрузить подпредставление MyView из пера?
Если представление внутри вашего пера является MyView, вот как его загрузить.Создайте этот статический метод как категорию в UIView:
@implementation UIView (NibLoading)
+ (id)viewWithNibName:(NSString*)nibName
{
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:nibName owner:nil options:nil];
if ([bundle count])
{
UIView *view = [bundle objectAtIndex:0];
if ([view isKindOfClass:self])
{
return view;
}
NSLog(@"The object in the nib %@ is a %@, not a %@", nibName, [view class], self);
}
return nil;
}
@end
Это позволит вам загрузить любой вид представления из файла пера (представление должно быть первым элементом, определенным в пиру).Вы должны создать свое представление следующим образом:
MyView *view = [MyView viewWithNibName:@"MyView"];
Если представление внутри пера не является MyView, но вы хотите загрузить его как подпредставление MyView, с MyView, определенным как владелец файла в патефайл, сделайте это следующим образом:
@implementation UIView (NibLoading)
- (void)loadContentsFromNibName:(NSString*)nibName
{
NSArray *bundle = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil];
if ([bundle count])
{
UIView *view = [bundle objectAtIndex:0];
if ([view isKindOfClass:[UIView class]])
{
//resize view to fit
view.frame = self.bounds;
//add as subview
[self addSubview:view];
}
NSLog(@"The object in the nib %@ is a %@, not a UIView", nibName, [view class]);
}
}
@end
Используя этот подход, просто создайте свое представление как обычно, используя initWithFrame, затем вызовите loadContentsFromNibName, чтобы загрузить содержимое из кончика.Вы бы загрузили свой вид так:
MyView *view = [[MyView alloc] initWithFrame:CGRect(0,0,100,100)];
[view loadContentsFromNibName:@"MyView"];