手动加载 nib 文件时未调用 init 或 initWithNibName
Posted
技术标签:
【中文标题】手动加载 nib 文件时未调用 init 或 initWithNibName【英文标题】:init or initWithNibName not getting called when loading nib file manually 【发布时间】:2013-11-11 13:51:15 【问题描述】:我正在手动加载 nib 文件(为了 UIView 的可重用性), 加载nib文件的代码
- (NSArray*)loadMyNibFile
UINib *nib = [UINib nibWithNibName:@"customView" bundle:nil];
NSArray *topLevelObjs = [nib instantiateWithOwner:self options:nil];
NSLog(@"objects: %@", topLevelObjs);
return topLevelObjs;
加载笔尖名称后,我将其添加到 UIScrollView
NSArray *array = [self loadMyNibFile];
CustomView *view = [array objectAtIndex:0];
CGRect frame = CGRectMake(0, 0, 320, 216);
frame.origin.x = self.scrollView.frame.size.width * 2;
frame.origin.y = 99;
[view setFrame:frame];
[self.scrollView addSubview:view];
不是问题在于,当我以这种方式加载 nib 文件时,不会调用 init
和 initWithNibName
方法,
怎么解决?
提前谢谢你,
【问题讨论】:
【参考方案1】:您应该覆盖[UIView initWithFrame:]
和[UIView initWithCoder:]
方法(请参阅UIView Class Reference)。
如果您总是从 NIB 加载视图,而不是手动创建,最好覆盖 awakeFromNib
(请参阅 reference)。
【讨论】:
以上是关于手动加载 nib 文件时未调用 init 或 initWithNibName的主要内容,如果未能解决你的问题,请参考以下文章
从 Nib 加载的 UIView,手动调用 autolayout
如何在 init 方法中从 NIB 加载 IBOutlets?
init&initWithFrame&initWithCoder
强制 Nib loader 使用 init?(with:) for custom subclass of NSObject in iOS