Не удается загрузить данные в первой строке UITableView - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь проанализировать данные HTML, используя HTMLParser (автор Бен Ривз), и отобразить результаты в UITableView. По некоторым причинам я могу показать результаты только в последней строке tableView. Вот фрагмент кода:

- (void)requestFinished:(ASIHTTPRequest *)request
{   
    NSData *responseData = [request responseData];
    NSError *error = [request error];
    HTMLParser *parser = [[HTMLParser alloc] initWithData:responseData error:&error];
    HTMLNode *bodyNode = [parser body];
    arrayNodes  = [bodyNode findChildrenWithAttribute:@"class" matchingName:@"foo" allowPartial:NO];

    for (HTMLNode *arrayNode in arrayNodes) {

        NSString *footitle = [arrayNode allContents];
        NSLog(@"%@", footitle);

        fooLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 200, 30)];
        fooLabel.text = (@"%@", footitle);
        fooLabel.textColor = [UIColor blackColor];
    }

    [self.fooTableView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  {

    return [arrayNodes count];
}

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }

    // Configure the cell.

    // [self.arrayNodes objectAtIndex:indexPath.row];

    [cell.contentView addSubview:fooLabel];

    return cell;
}

Где я делаю ошибку?

Ответы [ 2 ]

1 голос
/ 10 сентября 2011

Вам необходимо создать метку в вашем методе cellForRowAtindexPath.Прямо сейчас создается только одна метка-метка, которая применяется по очереди к каждой ячейке, а затем устанавливается на следующую ячейку, оставляя ее на последней ячейке.Поэтому вместо этого вы должны сделать это:

-

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
    }

    // Configure the cell.

       HTMLNode *arrayNode = [arrayNodes objectAtIndex:indexPath.row];
       NSString *footitle = [arrayNode allContents];

        UILabel *fooLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 200, 30)];
        fooLabel.text = (@"%@", footitle);
        fooLabel.textColor = [UIColor blackColor];


    [cell.contentView addSubview:fooLabel];

    [fooLabel release];

    return cell;
}
1 голос
/ 10 сентября 2011
for (HTMLNode *arrayNode in arrayNodes) {

        NSString *footitle = [arrayNode allContents];
        NSLog(@"%@", footitle);

        fooLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 200, 30)];
        fooLabel.text = (@"%@", footitle);
        fooLabel.textColor = [UIColor blackColor];
    }

Вы создаете fooLabel с тем же размером и местоположением фрейма, что и массивом arrayNodes.

затем в [cell.contentView addSubview: fooLabel]; он показывает вам последнее значение, с которым обновляется метка. выньте этот fooLabel из цикла for.

в вашей ячейкеForRowAtIndexPath:

HTMLNode* arrayNode = [arrayNodes objectAtIndex:[indexPath row]];
cell.textLabel.text = [NSString stringWithFormat:@"%@",[arrayNode allContents]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...