我有一个简单的 UINavigationViewController
,当某个项目被选中时,它会创建一个模态视图,其中有一个 UIImageView
(下面的 PostcardViewController)。但是,如果我调用
PostcardViewController *postcardViewController = [[PostcardViewController alloc] init];
postcardViewController.imageView.image = image;
[self.navigationController presentModalViewController:postcardViewController animated:YES];
postcardViewController.imageView
为空,图像永远不会显示。如果我切换后两行,并使其成为:
PostcardViewController *postcardViewController = [[PostcardViewController alloc] init];
[self.navigationController presentModalViewController:postcardViewController animated:YES];
postcardViewController.imageView.image = image;
postcardViewController.imageView
已设置,显示正常。一切都在 Interface Builder 中连接起来,而 PostcardViewController 中没有任何特定代码。通过调试,我发现,是在 [viewDidLoad
] 被调用之后 imageView 被连接起来,并且 [viewDidLoad
] 在我调用 [presentModalViewController
].
这是为什么,还有,我是不是做错了什么?我想我应该在实际显示它之前设置整个 View ,但截至目前,我必须先显示它才能完全设置它。
您只是使用 alloc+init 创建了 View Controller ,而不是 View 本身。 View 是延迟加载的,即第一次使用时。要在实际显示之前强制创建 View ,请执行以下操作:
PostcardViewController *postcardViewController = [[PostcardViewController alloc] init];
postcardViewController.view; // Forces the view to be loaded
postcardViewController.imageView.image = image; // Will no longer be nil
[self.navigationController presentModalViewController:postcardViewController animated:YES];
Tôi là một lập trình viên xuất sắc, rất giỏi!