我正在将iPhone应用程序转换为通用应用程序。我有一个NIB视图,我想在iPad上使用,但调整大小和定位。在iPhone上我与initWithNibName正常初始化...可以用你自己的initWithFrame初始化一个类吗?
EventEditViewController *eventEditViewController = [[EventEditViewController alloc] initWithNibName:@"EventEditViewController" bundle:nil];
我发现,这并没有为我在iPad上因为各种原因工作。所以,我在iPad上运行的时候......
EventEditViewController *eventEditViewControllerForIPad = [[EventEditViewController alloc] initWithFrame:iPadFrame eventDate:longDate event:eventName delegate:self];
这解决了几个问题创建了自己的初始化方法,改为调用。一个如何调整和定位我想要的视图以及如何正确地初始化某些变量。我实际上传递了比你在这里看到的更多的变量。
它工作得很好,但我现在才注意到,不像initWithNibName,viewDidLoad在我的initWithFrame方法之前触发。我只发现了这一点,因为我试图访问的变量viewDidLoad显示为一个僵尸,我想我正在初始化它在我的initWithFrame方法。
我对这种行为感到惊讶。这是正常的吗?对我来说,视图将在alloc/init调用中的namedMethod之前加载是没有意义的。
我现在想知道我在做什么可能不是一件好事。就像我说的那样工作得很好,但是我不应该在这里使用我自己的初始化方法吗?
如果可以这样做,也许有人可以解释为什么在init方法之前加载视图。
感谢,
约翰
啊。因此,我正在调整视图的大小和位置,必须先加载视图。编译时必须预先设置它,因为我现在已经看到我的initWithFrame实际上是首先调用的,但是一旦我调用指定的初始化程序,viewDidLoad就会运行,然后我的其余的initWithFrame代码就会运行。 – user278859
右视图控制器在创建时通常不会加载视图。许多应用程序在启动时将创建六个视图控制器,但只有其中一个会立即显示其视图。正如@MugunthKumar写道,如果内存变得紧张,控制器视图也可以被卸载。因此,您应该避免访问'-init ...'中的'view'属性,而是在'-viewDidLoad'方法中执行与视图相关的任何必要配置。 – Caleb