2009-11-03 51 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。是的,不要使用+初始化来加载图像。