我不明白这有什么问题。我正在尝试向当前 View 添加 subview 。我 alloc
和 initWithNibName
我的 SecondViewController
并设置其 myImageView
参数,该参数是一个 UIImageView
。问题是,当添加 subView 时,未设置 myImageView
。
这是代码:
- (void)viewDidLoad
{
[super viewDidLoad];
SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];
[self.view addSubview secondView.view];
}
如果我通过 Interface Builder 将图像设置为 myImageView
,它会正确显示在 addSubview
上,但如果我按照上述方式设置属性,它将不起作用... UIImageView
socket 已正确连接到 IB 上。
这是SecondViewController
:
@interface SecondViewController : UIViewController
{
}
@property(nonatomic,strong)IBOutlet UIImageView *myImageView;
@end
最佳答案
我相信您的问题是,当您调用 secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];
时, myImageView 导出尚未设置。 initWithNibName:bundle:
的文档说:“您指定的 nib 文件不会立即加载。它会在第一次访问 View Controller 的 View 时加载。”所以你需要这样的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
SecondViewController *secondView = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];
// Force the nib to load, which subsequently sets the myImageView outlet
[secondView view];
secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];
[self.view addSubview secondView.view];
}
但是,我不推荐这种方法。您确实应该在 SecondViewController 的 -viewDidLoad 方法中设置 myImageView 导出的图像。这就是它所属的地方。
// SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.myImageView.image = [UIImage imageNamed:@"image1.png"];
}
然后在另一个 View Controller 的 -viewDidLoad 方法中,只需像以前一样将 SecondViewController 的 View 添加为 subview :
- (void)viewDidLoad
{
[super viewDidLoad];
SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.view addSubview:secondVC.view];
}
关于ios - 使用 UIImageView 参数添加 UIView 来查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765184/