对此似乎有很多问题,但我无法使用其他人的答案,所以希望有人能回顾一下我是如何做到这一点的。我正在尝试使用。我有两个自定义 UITableViewCells,它们现在只有一个 BOOL 属性,这就是样式的方式。
在我的cellForRowAtIndexPath
方法中,根据返回的数据类型,我正在为我的单元格设置样式。如果数据是“月”标题,则它是一个细长的单元格,如果它是“新闻项目”,它将是一个更大的白色单元格。
当表格加载时,一切看起来都很好,但是如果我向下滚动以创建更多单元格然后向上滚动,单元格将被重新创建,最终滚动速度变慢,因为我的内存不足。
当我设置断点时,dequeueReusableCellWithIdentifier
总是返回 nil,所以我的单元格永远不会被重复使用,这似乎是一个问题。
在这张图片中,您可以看到单元格彼此堆叠并弄乱了:
这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *NewsCellIdentifer = @"NewsCellIdentifier";
static NSString *MonthCellIdentifier = @"MonthCellIdentifier";
NSUInteger row = [indexPath row];
NewsItem *item = [self.newsArray objectAtIndex:row];
if (item.IsMonth == YES)
{
NewsMonthUITableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:MonthCellIdentifier];
if (cell == nil)
{
cell = [[NewsMonthUITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MonthCellIdentifier];
}
// This handles any other "date" cells to allow for different spacing styles.
if (item.IsMonth)
{
UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(0, 10, 400, 20)];
av.backgroundColor = [UIColor clearColor];
av.opaque = NO;
av.image = [UIImage imageNamed:@"month-bar-bkgd.png"];
UILabel *monthTextLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 150, 20)];;
CGFloat font = 11.0f;
monthTextLabel.font = [BVFont HelveticaNeue:&font];
monthTextLabel.backgroundColor = [UIColor clearColor];
monthTextLabel.font = [BVFont HelveticaNeue:&font];
monthTextLabel.textColor = [BVFont WebGrey];
monthTextLabel.text = item.Title;
cell.backgroundColor = [UIColor clearColor];
[cell.contentView addSubview:av];
[cell.contentView addSubview:monthTextLabel];
}
return cell;
}
else
{
NewsUITableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:NewsCellIdentifer];
if (cell == nil)
{
cell = [[NewsUITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NewsCellIdentifer];
}
cell.contentView.backgroundColor = [UIColor clearColor];
UIView *whiteRoundedCornerView = [[UIView alloc] initWithFrame:CGRectMake(10,10,300,100)];
whiteRoundedCornerView.backgroundColor = [UIColor whiteColor];
whiteRoundedCornerView.layer.masksToBounds = NO;
whiteRoundedCornerView.layer.cornerRadius = 3.0;
whiteRoundedCornerView.layer.shadowOffset = CGSizeMake(-1, 1);
whiteRoundedCornerView.layer.shadowOpacity = 0.5;
[cell.contentView addSubview:whiteRoundedCornerView];
[cell.contentView sendSubviewToBack:whiteRoundedCornerView];
[cell.contentView addSubview:[self NewsItemThumbnailView:item]];
[cell.contentView addSubview:[self NewsItemTextView:item]];
[cell.contentView addSubview:[self NewsItemCornerIconIndicatorView:item]];
return cell;
}
return nil;
}
感谢您的任何帮助或建议!