【发布时间】:2011-01-13 19:35:26
【问题描述】:
我有一个 UIView 子类,它目前完全以编程方式组装自己。它有一个自定义的 initWithFrame:bundle: 初始化器,这是必要的,因为它使用传入的包来加载图像资源。
我想让这个视图成为一个更大的 nib 文件中的子视图,但是当 nib 加载代码到达它而不是我的自定义初始化程序时,将调用 initWithCoder。有什么方法可以将这个视图放在一个 nib 中并且仍然进行我的自定义初始化?
【问题讨论】:
我有一个 UIView 子类,它目前完全以编程方式组装自己。它有一个自定义的 initWithFrame:bundle: 初始化器,这是必要的,因为它使用传入的包来加载图像资源。
我想让这个视图成为一个更大的 nib 文件中的子视图,但是当 nib 加载代码到达它而不是我的自定义初始化程序时,将调用 initWithCoder。有什么方法可以将这个视图放在一个 nib 中并且仍然进行我的自定义初始化?
【问题讨论】:
是的,如果你的包是提前知道的,你也可以覆盖initWithCoder:(阅读:你不需要它作为参数传入)。否则,不行。
【讨论】:
如果您可以等到awakeFromNib,您可以在那里进行初始化。但是,您仍然存在无法将捆绑包传递给方法的问题。由于awakeFromNib 在所有出口和操作的初始化和设置之后被调用,对你来说可能为时已晚。或许围绕笔尖加载系统重新设计会更好?
【讨论】:
-awakeFromNib 自 2.0 起在 iOS 上可用:developer.apple.com/library/ios/#documentation/UIKit/Reference/…