Cocoa: 自定义视图代理的initWithFrame方法未被调用

3
根据苹果公司的文档《创建自定义视图》,如果您在Interface Builder中使用自定义视图代理,则应调用此方法。 如果您没有为自定义视图创建Interface Builder面板,有两种技术可用于在Interface Builder中创建子类实例。第一种是使用Interface Builder容器面板中的Custom View代理项。该视图是您自定义视图的替代品,允许您将视图相对于其他视图进行定位和大小调整。然后,您可以使用检查器指定视图所代表的NSView子类。当应用程序加载nib文件时,自定义视图代理将创建指定视图子类的新实例,并使用initWithFrame:方法初始化它,并根据需要传递任何自动调整大小标志。视图实例随后接收一个awakeFromNib消息。 不幸的是,在我的情况下它没有被调用。是否有人遇到过这个问题?
1个回答

6

最近版本的Xcode在部署到新版本操作系统时有了新的行为。在NIB的文件检查器中,查看运行时行为 - 实例化: 偏好编码器 是否已选中。如果是,则取消选择,如果您需要/希望为自定义视图调用-initWithFrame:。或者,保持选中并利用NIB加载机制将会调用-initWithCoder:。当然,您还应该确保您的类属性支持NSCoding,通过编码和解码任何有意义的自定义内部状态来进行序列化。


任何等效的实例化:更喜欢使用故事板的编码器选项? - Sangram Shivankar
我想补充一下,对于旧的XIB文件,在文件检查器中没有这个选项,因此需要使用旧的initWithFrame:初始化方法。在当前的Xcode 14中,这个选项位于文件检查器中的Interface Builder Document类别下。 - GorillaPatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接