自定义UICollectionViewCell未显示更改

时间:2014-06-05 20:12:39

标签: ios objective-c ios7

我创建了扩展UICollectionViewCell的类,并在故事板中自定义了单元格。在单元格的initWithCoder内,我修改了标签阴影。

    - (id)initWithCoder:(NSCoder *)aDecoder {
        self = [super initWithCoder:aDecoder];
        self.artistNameLabel.font = [UIFont fontWithName:@"Montserrat-Regular" size:12];
        self.artistNameLabel.layer.masksToBounds = NO;
        self.artistNameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.65];
        self.artistNameLabel.layer.shadowOffset = CGSizeMake(0, 0);
        self.artistNameLabel.layer.shadowOpacity = 1.0;
        self.artistNameLabel.layer.shadowRadius = 2.0;
        return self;
    }

由于某些原因,即使在创建单元格时调用了init,也不会显示更改。

如果我将影子代码移动到-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath它显示正常,但显然这对重用来说不是很好。

3 个答案:

答案 0 :(得分:3)

将其移至- (void)awakeFromNib。这是一个更好的地方。

答案 1 :(得分:2)

在自定义单元格上设置一个名为updateUI的公共方法,并在-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法中调用该方法。你可以在你的- (id)initWithCoder:(NSCoder *)aDecoder方法中为你的集合视图单元格分配init,但为了让你的shadowRadius,shadowOpacity等生效,我推荐上述方法。

#pragma mark - Helpers

- (void)updateUI // Update data within alreay alloc inited UI elements
{
    self.backgroundColor = [UIColor redColor];
    self.myImageView.frame = self.contentView.frame;
    self.myImageView.contentMode = UIViewContentModeScaleAspectFit;
}

- (void)setup // Alloc init UI elements
{
    self.myImageView = [[UIImageView alloc] init];
    [self.contentView addSubview:self.myImageView];
}

#pragma mark - Lifecycle Methods

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code
        [self setup];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self setup];
    }
    return self;
}

答案 2 :(得分:0)

关于你的答案,我需要更多信息,但请检查下一步

1)您使用的是自定义UICollectionViewCell

吗?

enter image description here

2)方法

   - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView   cellForItemAtIndexPath:(NSIndexPath *)indexPath {
   DomyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DomyCell" forIndexPath:indexPath];