UITableView Custom View все еще здесь, даже после перезагрузки - PullRequest
0 голосов
/ 20 февраля 2012

Я сделал очень простое табличное представление с функцией load more.Я добавил пользовательское представление для последней ячейки с текстом «Загрузить еще». После того, как пользователь нажал на кнопку «Загрузить больше», строки успешно увеличились.Но текст «Загрузить еще» не исчез.Пожалуйста, помогите.

Вот мой код.

- (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 ]

1 голос
/ 20 февраля 2012

Вы должны добавить loadMore в качестве подпредставления к cell.contentView, а не к ячейке.

после этого добавьте эту строку в свой cellForRow ..

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

В настоящее время ваша дополнительная нагрузка используется повторно и присутствует в последующих ячейках, если она используется повторно.

1 голос
/ 20 февраля 2012

Вы повторно используете и не удаляете представление, добавленное вами для загрузки больше

- (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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...