2012-08-01 36 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

相關問題