Ios 在xib文件中使用拖放时,将调用UIView的哪个init方法

Ios 在xib文件中使用拖放时,将调用UIView的哪个init方法,ios,initialization,uicollectionviewcell,Ios,Initialization,Uicollectionviewcell,这是自定义集合视图,标签下方是(评级视图i设计)。 但我发现每次评级视图没有出现时(图像视图和标签都出现了)。然后我发现这是因为我没有调用评级视图的init方法,所以它是nil,但为什么呢? 这是init方法 但它从不调用它,它只调用layoutSubview方法 它位于awakeFromNib:方法中。在实现文件中覆盖它,如下所示: - (void)awakeFromNib { [super awakeFromNib]; // Initialization code [self

这是自定义集合视图,标签下方是(评级视图i设计)。

但我发现每次评级视图没有出现时(图像视图和标签都出现了)。然后我发现这是因为我没有调用评级视图的init方法,所以它是nil,但为什么呢?
这是init方法

但它从不调用它,它只调用layoutSubview方法


它位于awakeFromNib:方法中。在实现文件中覆盖它,如下所示:

- (void)awakeFromNib {
  [super awakeFromNib];
  // Initialization code
  [self setupStuff];
}

考虑一下这种模式

-(id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self _setup];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aCoder {
    if (self = [super initWithCoder:aCoder]) {
        [self _setup];
    }
    return self;
}

-(void)_setup {
    blah;
    blah;
    blah;
}

试着“知道发生了什么”,但如果你刚刚开始的话,这会帮你度过难关。希望它有助于

在故事板调用initWithCoder中生成的视图:可能的重复虽然我已经找到了解决问题的方法,但这超出了我的想象,我确实帮了很多忙。
-(id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self _setup];
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aCoder {
    if (self = [super initWithCoder:aCoder]) {
        [self _setup];
    }
    return self;
}

-(void)_setup {
    blah;
    blah;
    blah;
}