0

我不确定这是否是故事板错误。我创建了一个带有自定义单元格的项目。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"HomeGameTurnCell";
    HomeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[HomeTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

自定义单元格有一些图像视图。其中一个图像视图是一个子类。

@interface HomeTableViewCell : UITableViewCell

@property (strong, nonatomic) IBOutlet RoundedProfilePicture *profilePictureImageView;
@property (strong, nonatomic) IBOutlet UIImageView *turnThumbnailImage;
@property (strong, nonatomic) IBOutlet UILabel *usernameLabel;
@property (strong, nonatomic) IBOutlet UILabel *lastPlayedLabel;

@end

RoundedProfilePicture 子类只有以下内容:

-(id)init {
    NSLog(@"%s",__PRETTY_FUNCTION__);
    self = [super init];
    if (self) {
        [self setupView];
    }
    return self;
}

- (void)setupView
{
    NSLog(@"%s",__PRETTY_FUNCTION__);
    self.clipsToBounds = YES;
    self.layer.cornerRadius = self.bounds.size.width / 2;
    self.layer.borderWidth = 3;
    self.layer.borderColor = [UIColor darkGrayColor].CGColor;
}

我发现没有调用 RoundedProfilePicture 方法。在情节提要中,我设置了一个原型单元和正确的标识符。我还将图像视图设置为正确的自定义类。但它似乎没有生效,有什么我遗漏/可以检查的吗?

4

2 回答 2

0

问题是当 UIimageView 被子类化并从情节提要中调用时,会为 init 调用不同的方法。

-(id)initWithCoder:(NSCoder *)aDecoder {
    // As the subclassed UIImageView class is called from storyboard the initWithCoder is overwritten instead of init
    NSLog(@"%s",__PRETTY_FUNCTION__);
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setupView];
    }
    return self;
}

这解决了不调用圆形纵断面图的问题。

于 2013-09-13T10:16:03.303 回答
0

当你重用一个元素时,你应该重写 UITableViewCell 方法:

 -(void)prepareForReuse

而不是初始化。每次都会调用。

如果你想要一次初始化,你应该在:initWithStyle:reuseIdentifier:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        //do your stuff here
    }
   return self;
}

来自苹果文档:

如果您为指定的标识符注册了一个类并且必须创建一个新单元格,则此方法通过调用其 initWithStyle:reuseIdentifier: 方法来初始化该单元格。对于基于 nib 的单元格,此方法从提供的 nib 文件加载单元格对象。如果现有单元格可供重用,则此方法将改为调用该单元格的 prepareForReuse 方法。

于 2013-09-10T22:07:17.370 回答