iPad上,基于UIView的新类的initWithFrame没有被调用?

Posted

技术标签:

【中文标题】iPad上,基于UIView的新类的initWithFrame没有被调用?【英文标题】:On iPad, the initWithFrame of a new class based on UIView is not called? 【发布时间】:2012-04-21 20:11:08 【问题描述】:

对于单视图应用,增加了一个 DrawView 类,它是 UIView 类的子类。

作为app的主视图,所以这个类的drawRect方法效果很好,可以画东西,比如,但是Xcode生成的代码有一行“//初始​​化代码”表示把初始化代码放在那里,在initWithFrame里面,但是我放了一些代码,它没有被调用,并且在那里设置了一个断点,但它永远不会停在那里?然后我使用通常的方法添加了一个init,它也没有被调用?

【问题讨论】:

视图是从笔尖加载的吗? 它被设置为用于默认 ViewController.xib 的视图...是否与从 nib 加载相同? 【参考方案1】:

尝试覆盖 -(id)initWithCoder:(NSCoder*)coder。我相信当从 nib 加载视图时,它会使用这个 init 方法。请参阅this 问题。

【讨论】:

如果在没有初始化代码的情况下添加initWithCoder,则将触发initWithFrame断点(并且任何初始化代码都将在那里运行)...以及在Interface Builder上设置的背景颜色不会被使用。都是黑色的。是否可以使用 Interface Builder 中设置的颜色? 您确定需要覆盖init,还是可以使用awakeFromNib? (允许您在 nib 加载后进行自定义初始化。) 这是正确答案。如果您可能同时使用 NIB 和代码实例化的类,只需创建某种 -commonConfiguration 方法(或类似名称)并从两个地方调用它。然后你的初始化代码就在一个地方。【参考方案2】:

initWithCoder:-如果您从 Interface Builder nib 文件加载视图并且您的视图需要自定义初始化,建议您实现此方法。nib 加载代码不使用initWithFrame: 方法来实例化新的视图对象。相反,它使用 initWithCoder: 方法,该方法是 NSCoding 协议的一部分。nib 加载代码不使用 initWithFrame: 方法来实例化新的视图对象。相反,它使用 initWithCoder: 方法,该方法是 NSCoding 协议的一部分。apple's doc

initWithFrame: - 视图的默认初始化方法,新的视图对象必须插入到窗口的视图层次中才能使用。如果您以编程方式创建视图对象,则此方法是 UIView 类的指定初始化程序。

这里有更多信息:overriding methods

乐于助人:)

【讨论】:

以上是关于iPad上,基于UIView的新类的initWithFrame没有被调用?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C编程 — 类和继承

实验六20177101010119穷吉

c++:-4

Java基础

面向对象之继承

Jquery 类选择器无法选择使用 .append() 添加的新类实例