0

我无法弄清楚这有什么问题。我正在尝试向当前视图添加子视图。我allocinitWithNibName我的SecondViewController并设置它的myImageView参数是 a UIImageView。问题是添加子视图时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];
}

如果我myImageView通过 Interface Builder 将图像设置为正确显示,addSubview但如果我按上述方式设置属性,则它不起作用...UIImageView插座在 IB 上正确连接。

这是SecondViewController

@interface SecondViewController : UIViewController
{

}

@property(nonatomic,strong)IBOutlet UIImageView *myImageView;


@end
4

2 回答 2

1

我相信您的问题是,当您调用secondView.myImageView.image = [UIImage imageNamed:@"image1.png"];myImageView 时,插座尚未设置。文档initWithNibName:bundle:说,“您指定的 nib 文件不会立即加载。它是在第一次访问视图控制器的视图时加载的。” 所以你需要这样的代码:

- (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"];
}

然后在另一个视图控制器的 -viewDidLoad 方法中,只需像以前一样将 SecondViewController 的视图添加为子视图:

- (void)viewDidLoad
{
     [super viewDidLoad];

     SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

     [self.view addSubview:secondVC.view];
}
于 2012-08-01T19:32:09.010 回答
0

如果您通过 IB 设置 myImageView,它将实例化 myImageView。如果您使用上面的代码,myImageView 将被实例化。

您必须在 SecondViewController viewDidLoad 或 initWithFrame 中添加以下行:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)]
secondView.myImageView = imageView;

[感谢H2CO3]

于 2012-08-01T18:22:46.850 回答