如何让我的 Nib 正确加载我自定义的 UIScrollView 子类?
Posted
技术标签:
【中文标题】如何让我的 Nib 正确加载我自定义的 UIScrollView 子类?【英文标题】:How can I make my Nib load correctly my customized UIScrollView subclass? 【发布时间】:2009-05-07 16:31:19 【问题描述】:我的笔尖内有一个不错的 UIScrollView,效果很好。然后我有一些非常特殊的需求和子类化 UIScrollView。在我的 Nib 中,我将身份检查器中的类更改为我的子类。
但由于某种原因,当 nib 加载器从 nib 构建所有这些对象时,我的 -initWithFrame: 方法永远不会被调用。实际上我现在在我的子类中没有改变任何东西。滚动视图工作正常。期望它似乎是一个空白的 UIScrollView,即使我告诉 nib 它应该是一个用于测试目的的 SpecializedUIScrollView。
在子类化 UIScrollView 的同时仍使用 Nib 文件将其纳入透视图时,我还必须考虑其他事项吗?
我的专用初始化程序如下所示:
- (id)initWithFrame:(CGRect)frame
if (self = [super initWithFrame:frame])
NSLog(@"Hello !!!!!!!!!!!!!");
return self;
如果我尝试从 Nib 加载它,我永远不会在控制台中看到那个 Hello。当然,如果我自己分配和初始化它,它就可以工作。但是我不想以编程方式定位我的滚动视图,如果我可以使用该死的很酷的界面生成器。
【问题讨论】:
【参考方案1】:nib 或 xib 中的对象存储为序列化对象,这可能意味着您必须使用 awakeFromNib
方法,因为从不调用 init 方法。
【讨论】:
【参考方案2】:扩展initWithCoder
,一定要调用super方法。正是在这个超级通话期间,setFrame
将在您的班级上被调用。
然后您可以在 initWithCoder
中重新使用您的标准 initWithFrame
调用,界面构建器将控制帧大小。
- (id)initWithCoder:(NSCoder *)aDecoder
[super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
return [self initWithFrame:[self frame]];
【讨论】:
以上是关于如何让我的 Nib 正确加载我自定义的 UIScrollView 子类?的主要内容,如果未能解决你的问题,请参考以下文章