为什么在initWIthCoder中调用我的UIView图层属性时没有设置:(NSCoder *)aDecoder?

时间:2011-03-02 17:58:10

标签: iphone cocoa-touch ios4 uiview interface-builder

我有一个自定义的View类,它构建了UIView的子类。

此视图通过ViewController中的nib文件加载:

[[NSBundle main] loadNibNamed:@"MyCustomView" owner:self options:nil];

MyCustomView.h 内部(正确连接在IB中作为主要视图类) 我有一些链接的子视图属性:

@interface MyCustomView : UIView <UITextFieldDelegate> {
....
@public

UIView *backgroundLayer; // a subview of the Main View inside the nib
....
}

@property (nonatomic, retain) IBOutlet UIView *backgroundLayer;

此插座已在Interface Builder中正确连接。

MyCustomView.m 中,我有以下实现:

#import <quartzcore/QuartzCore.h>

@implementation MyCustomView

@synthesize backgroundLayer;

- (id)initWithCoder:(NSCoder *)aDecoder {
   self = [super initWithCoder:aDecoder];
   if (self) {
      ....
      self.backgroundLayer.layer.cornerRadius = 12.0f;
      self.backgroundLayer.layer.borderColor = [UIColor lightGrayColor].CGColor;
      self.backgroundLayer.layer.maskToBounds = YES;
      ....
   }
正在应用那些backgroundLayer.layer设置的

NONE 。当我在模拟器中运行时,自定义视图会出现在它没有任何这些模块的NIB中的显示方式吗?我错过了什么?我在不正确的地方拨打电话吗?

1 个答案:

答案 0 :(得分:16)

这个问题的正确答案是使用方法:

 -(void)awakeFromNib {
    ......
 }