自定义 UITableViewCell 在滚动时显示完整单元格之前不显示数据
Posted
技术标签:
【中文标题】自定义 UITableViewCell 在滚动时显示完整单元格之前不显示数据【英文标题】:custom UITableViewCell doesn't show data before showing full cell when scrolling 【发布时间】:2014-10-09 05:48:07 【问题描述】:我的应用程序有自定义 UITableViewCell 高度为 470 像素。 我完全以编程方式创建了自定义单元格。
这是我的 cellForRowAtIndexPath 方法
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
pixDealsTableViewCell *dealCell = (pixDealsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"Deals" forIndexPath:indexPath];
if (dealCell == nil)
dealCell = [[pixDealsTableViewCell alloc] init];
dealCell.dBusinessLogo.image = [pixUtil imageWithImage:[UIImage imageNamed:@"profile_icon"] scaledToSize:CGSizeMake(60, 60)];
[dealCell.dBusinessName setTitle:@"Business Name" forState:UIControlStateNormal];
dealCell.dTimeAgo.text = [NSString stringWithFormat:@"5 min ago"];
[dealCell.dHeading setTitle:@"Deals Head" forState:UIControlStateNormal];
[dealCell.dDescription setTitle:@"Descriptionskjdfnkjsdnfis" forState:UIControlStateNormal];
dealCell.dImage.image = [pixUtil imageWithImage:[UIImage imageNamed:@"carrier.png"] scaledToSize:CGSizeMake(290, 250)];
[dealCell.dLike setTitle:@"Like" forState:UIControlStateNormal];
[dealCell.dShare setTitle:@"Share" forState:UIControlStateNormal];
return dealCell;
这是我的自定义单元初始化方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
// Initialization code
NSLog(@"NEW CELL");
customRed = [[UIColor alloc]initWithRed:209.0f/255.0f green:19.0f/255.0f blue:38.0f/255.0f alpha:1.0f];
[self setBackgroundColor:[UIColor grayColor]];
containerCell = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 300, 700)];
[containerCell setBackgroundColor:[UIColor whiteColor]];
self.dBusinessLogo = [[UIImageView alloc]initWithFrame:CGRectMake(15, 15, 60, 60)];
self.dBusinessName = [[UIButton alloc]initWithFrame:CGRectMake(80, 20, 225, 20)];
[self.dBusinessName setTitle:@"Business Name" forState:UIControlStateNormal];
self.dBusinessName.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[self.dBusinessName addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
[self.dBusinessName setTitleColor:customRed forState:UIControlStateNormal];
self.dTimeAgo = [[UILabel alloc]initWithFrame:CGRectMake(80, 50, 225, 15)];
self.dHeading = [[UIButton alloc]initWithFrame:CGRectMake(15, 80, 290, 20)];
self.dHeading.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[self.dHeading addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
[self.dHeading setTitleColor:customRed forState:UIControlStateNormal];
self.dDescription = [[UIButton alloc]initWithFrame:CGRectMake(15, 105, 290, 50)];
self.dDescription.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[self.dDescription addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
[self.dDescription setTitleColor:customRed forState:UIControlStateNormal];
self.dImage = [[UIImageView alloc]initWithFrame:CGRectMake(15, 160, 290, 250)];
self.dLike = [[UIButton alloc]initWithFrame:CGRectMake(10, 420, 150, 40)];
self.dLike.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[self.dLike addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
[self.dLike setTitleColor:customRed forState:UIControlStateNormal];
self.dShare = [[UIButton alloc]initWithFrame:CGRectMake(160, 420, 150, 40)];
self.dShare.titleLabel.font = [UIFont boldSystemFontOfSize:14];
[self.dShare addTarget:self action:@selector(haveAccount:) forControlEvents:UIControlEventTouchUpInside];
[self.dShare setTitleColor:customRed forState:UIControlStateNormal];
[self.contentView addSubview:containerCell];
[self.contentView addSubview:self.dBusinessLogo];
[self.contentView addSubview:self.dBusinessName];
[self.contentView addSubview:self.dTimeAgo];
[self.contentView addSubview:self.dHeading];
[self.contentView addSubview:self.dDescription];
[self.contentView addSubview:self.dImage];
[self.contentView addSubview:self.dShare];
// NSLog(@"Deals View added");
return self;
这是我完整查看的 UITableViewCell。
当我向下滚动到下一个单元格时,它无法正确加载。
将单元格完全向上滚动后正确加载
请帮我解决这个问题。
【问题讨论】:
添加您的 cellForRowAtIndexPath 代码以供参考 当你分配你的单元格时,使用 initWithReuseIdentifier: 否则它总是会创建一个新的单元格。您也可以尝试使用 dequeueReusableCellWithIdentifier: 而不是 dequeueReusableCellWithIdentifier:forIndexPath: @Imotep 我在视图控制器中注册了单元格 [dealsTableView registerClass:[pixDealsTableViewCell class] forCellReuseIdentifier:@"Deals"];所以它不会每次都创建新的单元格。我检查了 NSLog。 @mehulpatel 我如何实现-layoutForSubviews? tableViewCell 没有那个方法? @mehulpatel 我用 customcell 初始化方法更新了帖子。你能解释一下我如何实现 layoutSubviews 方法吗? 【参考方案1】:终于得到了答案。我创建了高度为 700 的 containerCell 视图。但单元格高度仅为 470。 我将 containerCell 视图高度更改为 470。它解决了我的问题。 :)
【讨论】:
以上是关于自定义 UITableViewCell 在滚动时显示完整单元格之前不显示数据的主要内容,如果未能解决你的问题,请参考以下文章
UITableviewCell 在我滚动时显示另一个单元格的文本
如何自定义滑动 UITableViewCell 时显示的删除按钮