gpt4 book ai didi

cocoa-touch - UIViewController 未加载我的自定义 UIView

转载 作者:行者123 更新时间:2023-12-03 00:29:30 25 4
gpt4 key购买 nike

这对于大师来说应该是直截了当的。我没有真正编写任何代码,只有几个 Controller 和一个自定义 UIView。全部通过 Nib 连接。应用程序加载时没有崩溃,但我看不到自定义 UIView 中的 NSLog() 命中。

我的应用程序委托(delegate)有默认模板代码,它调用我的一个名为 TabAnimationController 的类。 TabAnimationViewController 将其 View 设置为 TabView。我确保在 TabAnimationViewController 的 NIB 中,文件的所有者设置为 TabAnimationViewController,并且我的 UIView 实例的类设置为 TabView。

在 TabView.m 中,我试图查看 NSLog 将如何发挥作用,但它根本没有显示出来。

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

- (id)initWithFrame:(CGRect)frame {
NSLog(@"Calling initWithFrame:");
return self;
}

奇怪。我不知道为什么即使在正确的 IB 连接之后我的 NSLog 也不会显示。只有放入drawRect:中的任何东西才会被调用。为什么 initWithFrame 或 loadView 没有被命中?如果我想以编程方式自定义此 View 怎么办?

最佳答案

首先,当 View 从 nib 文件中脱水时,将调用 initWithCoder,而不是 initWithFrame。因此,您还需要在 initWithCoder 中实现初始化。 (如果您预计以编程方式创建 TabView 而不是连接到 IB 中,那么保留 initWithFrame 初始化可能是个好主意。只需将初始化重构为另一个方法并从两个实现中调用它即可.)

此外,在上面的初始化代码中,您必须始终调用父类(super class)的初始化。所有自定义类在其 init 实现中都使用一个样板模式:

if (self = [super initXXX]) { do your initialization } 
return self;

第二,loadView 实际上是一个 UIViewController 方法,而不是 UIView 方法,仅当 view 时才会被调用> Controller 的 socket 为零。

除非您使用 Controller 以编程方式自己编写 View ,否则不需要覆盖 loadView。相反,您应该重写 viewDidLoad(在 View 加载后调用)来执行额外的初始化。

关于cocoa-touch - UIViewController 未加载我的自定义 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/367518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com