2012-08-01 87 views
0

我找不出这有什么问题。我正在试图为我当前的视图添加一个子视图。 I allocinitWithNibName my SecondViewController并且设置它的myImageView参数是UIImageView。问题是,添加子视图时未设置myImageView用UIImageView参数添加UIView查看

这是代码:

- (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其被正确地显示在addSubview但如果我设置属性作为如上所述它不工作...该UIImageView插座在IB上正确连接。

这是SecondViewController

@interface SecondViewController : UIViewController 
{ 

} 

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


@end 

回答

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]; 
} 
0

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

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

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

[感谢H2CO3]

+0

号是你而必须添加'self.imageView = [[UIImage的页头] init];'在SecondViewController中 - 你的方法破坏封装。 – 2012-08-01 18:24:11

+0

在IB中,我添加了一个'UIImageView'并将它的Outlet连接到'myImageView'。我还需要分配并初始化它吗? – 2012-08-01 18:24:51

+0

我试过这样做:'secondView.myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@“image1.png”]];'但它没有改变一件事。 = / – 2012-08-01 18:26:33