UIViewController没有加载我的自定义UIView

Coo*_*coa 4 cocoa-touch

这对于一个大师来说应该是直截了当的.我没有真正写出任何代码,只有几个控制器和一个自定义UIView.全部通过笔尖连接.该应用程序加载而不会崩溃,但我无法从我的自定义UIView中看到我的NSLog()命中.

我的应用程序委托具有默认模板代码,该代码调用我的一个名为TabAnimationController的类.TabAnimationViewController将其视图设置为TabView.我确保在TabAnimationViewController的NIB中,File的所有者设置为TabAnimationViewController,并且我的UIView实例将其类设置为TabView.

在TabView.m中,我试图了解NSLog将如何命中,并且它根本没有显示出来.

- (void)loadView {
 NSLog(@"calling loadView");
}

- (id)initWithFrame:(CGRect)frame {
NSLog(@"Calling initWithFrame:");
    return self;
}
Run Code Online (Sandbox Code Playgroud)

奇怪.我不确定为什么即使在正确的IB连接之后我的NSLog也不会出现.只有任何放入drawRect的东西:才会调用.为什么initWithFrame或loadView不会受到影响?如果我想以编程方式自定义此视图,该怎么办?

ker*_*emk 8

首先,当一个视图是从笔尖脱水文件,而不是initWithFrame,initWithCoder被调用.因此,您还需要实现初始化initWithCoder.(initWithFrame如果您期望以编程方式创建TabView而不是在IB中挂钩,那么保持初始化也是一个好主意.只需将初始化重构为另一个方法并从两个实现中调用它.)

同样在上面的初始化代码中,您必须始终调用超类的初始化.所有自定义类在其init实现中都使用了锅炉板模式:

if (self = [super initXXX]) { do your initialization } 
return self;
Run Code Online (Sandbox Code Playgroud)

其次,只有当控制器的出口为零时才调用loadView实际上是UIViewController方法而不UIView调用方法view.

除非您使用控制器以编程方式自己编写视图,否则无需覆盖loadView.相反,您应该覆盖viewDidLoad(在加载视图后调用)进行其他初始化.