我有自定义视图的UITableView。 对于tableview的底部,我在那里添加了一个“Load More”单元格。 单击后,tableview会成功加载更多数据,并且“加载更多”单元格仍位于tableview的底部。 但是,在我单击第一个“加载更多”后,出现第二个“加载更多”,并且自定义视图仍然存在于第二个“加载更多”的同一单元格中。 “加载更多”和自定义视图位于同一单元格上。我希望该单元格只显示“加载更多”。
第三个,第四个“加载更多”存在此问题。 任何人都可以帮助我吗?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return imageCurPos+1;
}
- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if([aTableView tag]==501){
// Main Table
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
[[cell viewWithTag:3007] removeFromSuperview];
const NSInteger BOTTOM_LABEL_TAG = 3002;
UIImageView *bottomLabel;
UILabel *loadMore;
if(indexPath.row < imageCurPos){
if (cell == nil)
{ //All repeat things come here, if don't want to repeat here, please state outside this brucket
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
//Edited
for (UIView *view in [cell.contentView subviews])
{
[view removeFromSuperview];
}
bottomLabel = [[[UIImageView alloc] initWithFrame: CGRectMake(50, 30, 250, 112)] autorelease];
[cell.contentView addSubview:bottomLabel];
bottomLabel.tag = BOTTOM_LABEL_TAG;
cell.backgroundView =
[[[UIImageView alloc] init] autorelease];
cell.selectedBackgroundView =
[[[UIImageView alloc] init] autorelease];
UIImageView *iconView = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 30, 45, 45)] autorelease];
iconView.image = [UIImage imageNamed:@"02_bubble.png"];
[[cell contentView] addSubview:iconView];
bottomLabel.image = [UIImage imageNamed:@"05_bubble.png"];
}else if(indexPath.row == imageCurPos ){ //For Load More
if (cell == nil)
{ //All repeat things come here, if don't want to repeat here, please state outside this brucket
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
//Edited
for (UIView *view in [cell.contentView subviews])
{
[view removeFromSuperview];
}
loadMore =
[[[UILabel alloc]
initWithFrame:
CGRectMake( 0, 0, 300, 50)]
autorelease];
loadMore.text = @"Load more...";
loadMore.textAlignment = UITextAlignmentCenter;
loadMore.tag = 3007;
loadMore.textColor = [UIColor whiteColor];
loadMore.backgroundColor = [UIColor darkTextColor];
[cell.contentView addSubview:loadMore];
}
return cell;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath{
if([tableView tag]==501){
if([indexPath row] != imageCurPos){
}else{ // For load more
NSLog(@"noRow Prev: %d", imageCurPos);
imageCurPos += interval;
NSLog(@"noRow After: %d", imageCurPos);
[tbl_mo_main reloadData];
}
}
答案 0 :(得分:2)
我认为你应该使用2个不同的标识符,一个用于普通单元格,一个用于加载更多单元格。
有一点是创建自定义单元格应该在块中完成。
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
// create the views in side the cell and add it
...
}
然后在此块之外,更新单元格。
您可以在创建单元格时为视图设置标记,并通过[cell.contentView viewWithTag:tag]
答案 1 :(得分:0)
[cell.contentView addSubview:loadMore];
此行将标签添加到单元格内容视图,但是当重复使用该单元格时..该单元格中仍然存在该标签。
在if和else中if(cell == nil)之后添加以下代码以进行索引路径检查。
for (UIView *view in [cell.contentView subviews])
{
[view removeFromSuperview];
}