【发布时间】:2012-01-16 06:04:41
【问题描述】:
我有一个名为 LaunchController 的UIViewController,它会在我的 iPhone 应用首次打开时启动:
@interface LaunchController : UIViewController<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
然后,当单击按钮时,我推送另一个视图控制器:
MainController *c = [[MainController alloc] initWithImage:image];
[self presentModalViewController:c animated:NO];
MainController 有以下构造函数,我使用它:
- (id)initWithImage:(UIImage *)img
{
self = [super init];
if (self) {
image = img;
NSLog(@"inited the image");
}
return self;
}
然后它有一个viewDidLoad方法如下:
- (void)viewDidLoad
{
NSLog(@"calling view did load");
[super viewDidLoad];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[self.view addSubview:imageView];
NSLog(@"displaying main controller");
}
当程序运行时,我看到MainController 的构造函数被调用(由于NSLog 的输出),但是viewDidLoad 从未被调用,即使我正在调用presentModalViewController。为什么是这样?为什么不调用viewDidLoad?
【问题讨论】:
-
MainController 是否实现了
loadView方法? -
没有。 loadView 应该放什么?
-
如果新视图已启动,您实际上不会检查它。在 if 括号内移动 NSLog 以查看视图是否已启动。
-
是的,它被初始化了。我移动了它,它仍然打印出来。
-
您的项目中有一个名为
MainController.xib的笔尖吗?如果不这样做,则必须覆盖-loadView并提供一个空视图。
标签: iphone ios uiviewcontroller