2009-11-03 18 views
1

我需要根據View初始化時將設置的屬性更改其中一個視圖的背景。 這可能嗎? 我有背景設置爲UIImageView,如果我將它設置爲界面生成器中的圖像它的作品,但我不能以編程方式更改背景。根據屬性在iPhone應用程序中更改視圖背景

這裏是我使用的(我基於它關閉該加載圖像到UITableCell教程)代碼:

+ (void) initialize { 
/* The threat level images are cached as part of the class, 
so they need to be explicitly retained. 
*/ 
redLevel = [[UIImage imageNamed:@"red.png"] retain]; 
yellowLevel = [[UIImage imageNamed:@"yellow.png"] retain]; 
greenLevel = [[UIImage imageNamed:@"green.png"] retain]; 
} 

-(id) initWithThreatLevel:(NSInteger) threatLevel { 
if (self = [super initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]]) { 
    switch (threatLevel) { 
     case 1: 
      self.threat_levelImageView.image = greenLevel; 
      break; 
     case 2: 
      self.threat_levelImageView.image = yellowLevel; 
      break; 
     case 3: 
      self.threat_levelImageView.image = redLevel; 
      break; 
     default: 
      self.threat_levelImageView.image = greenLevel; 
      break; 
    } 
} 

return self; 
} 
+0

有兩個問題:1)是否在-initWithThreatLevel之前調用了initialize? 2)是thread_levelImageView正確綁定到有問題的UIImageView(使用Interface Builder)? – codelogic 2009-11-03 21:08:51

+1

+初始化由操作系統調用一次,然後纔會向類發送消息。所以是的,它被稱爲beofre initWithThreadLevel。 – 2009-11-03 21:18:52

+1

+初始化不是你想要這種類型的代碼的地方。您可以輕鬆地將圖像預加載移動到awakeFromNIB,viewDidLoad或viewWillAppear,並測試它們是否爲零,在這種情況下,您可以加載它們。 – mahboudz 2009-11-03 22:05:56

回答

4

您應該將這些任務移動到您的awakeFromNib方法。在initXXX時間,NIB連接通常還沒有建立。在awakeFromNib中,你保證所有的連接都已經建立。

1

確保threat_levelImageView是在Interface Builder中連接的IBOutlet。是的,不要使用+初始化來加載圖像。

相關問題