UITableView自定义视图即使在重新加载后仍然在这里

时间:2012-02-20 09:08:37

标签: objective-c

我做了一个非常简单的表视图,加载了更多功能。 我在最后一个单元格上添加了一个自定义视图,文本为“加载更多” 用户单击加载更多功能后,行成功增加。 但是“加载更多”这个文字并没有消失。 请帮忙。

这是我的代码。

- (void)viewDidLoad {
    [super viewDidLoad];

    noRow = 10;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return noRow+1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (indexPath.row != noRow ) { // As long as we haven’t reached the +1 yet in the count, we populate the cell like normal
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSString *cellValue = [[NSNumber numberWithInt:[indexPath row]] stringValue];

    cell.text = cellValue;
    } // Ok, all done for filling the normal cells, next we probaply reach the +1 index, which doesn’t contain anything yet

    else if(indexPath.row == noRow ) { // Here we check if we reached the end of the index, so the +1 row
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
        UILabel *loadMore;

        loadMore =[[UILabel alloc]initWithFrame: CGRectMake(0,0,320,50)];
        loadMore.textColor = [UIColor blackColor];
        loadMore.highlightedTextColor = [UIColor darkGrayColor];
        loadMore.backgroundColor = [UIColor clearColor];
        loadMore.font=[UIFont fontWithName:@"Verdana" size:20];
        loadMore.textAlignment=UITextAlignmentCenter;
        loadMore.font=[UIFont boldSystemFontOfSize:20];
        loadMore.text=@"Load More..";
        [cell addSubview:loadMore];


    }        
    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if(indexPath.row == noRow){
        NSLog(@"noRow Prev: %d", noRow);
        noRow += 5;
        NSLog(@"noRow After: %d", noRow);
        [self.tableView reloadData];

    }else{
        NSLog(@"IndexPath.row: %d", indexPath.row);
    }
}

2 个答案:

答案 0 :(得分:1)

您正在重复使用,并且您没有删除已添加的视图以加载更多

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    [[cell viewWithTag:121] removeFromSuperview];//remove this tag view
    if (indexPath.row != noRow ) { // As long as we haven’t reached the +1 yet in the count, we populate the cell like normal
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }

        // Set up the cell...
        NSString *cellValue = [[NSNumber numberWithInt:[indexPath row]] stringValue];

        cell.text = cellValue;
    } // Ok, all done for filling the normal cells, next we probaply reach the +1 index, which doesn’t contain anything yet

    else if(indexPath.row == noRow ) { // Here we check if we reached the end of the index, so the +1 row
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
        UILabel *loadMore;

        loadMore =[[UILabel alloc]initWithFrame: CGRectMake(0,0,320,50)];
        loadMore.textColor = [UIColor blackColor];
        loadMore.highlightedTextColor = [UIColor darkGrayColor];
        loadMore.backgroundColor = [UIColor clearColor];
        loadMore.font=[UIFont fontWithName:@"Verdana" size:20];
        loadMore.textAlignment=UITextAlignmentCenter;
        loadMore.font=[UIFont boldSystemFontOfSize:20];
        loadMore.text=@"Load More..";
        loadMore.tag = 121;// just setting the tag
        [cell addSubview:loadMore];


    }        
    return cell;
}

答案 1 :(得分:1)

您应该将loadMore作为子视图添加到cell.contentView而不是单元格。

之后在你的cellForRow中添加这一行..

  for (UIView *view in [cell.contentView subviews]) 
    {
        [view removeFromSuperview];
    }

目前,您的负载更多正在重复使用,如果重复使用,则会出现在后续单元格中。