Содержимое ячейки изменяется для строк, находящихся за пределами высоты табличного представления (чтобы увидеть эти ячейки, мы должны прокрутить вниз)? - PullRequest
0 голосов
/ 07 мая 2010

Я установил размер tableView, который я показываю как popoverController, как 4 * rowheight. И я использую 12 клеток в tableView. Каждая ячейка содержит изображение и метку. Я могу видеть все клетки, прокручивая. До 5-й ячейки все нормально. После пятой пятой ячейки метка и изображение, которое я использую в первых четырех ячейках, повторяются для остальных ячеек. И если я выберу ячейку, результат будет точно показан.

Но когда я снова беру tableView, изображение и метки не точны даже для первых 5 ячеек. Все они изменены, но выбор дает правильный результат. Кто-нибудь может мне помочь ??

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil)
{
    cell = [self tableviewCellWithReuseIdentifier:CellIdentifier rowNumber:indexPath.row];
}
//tableView.backgroundColor = [UIColor clearColor];
return cell;
}


- (UITableViewCell *)tableviewCellWithReuseIdentifier:(NSString *)identifier rowNumber:(NSInteger)row
{   

 CGRect rect;
rect = CGRectMake(0.0, 0.0, 360.0, ROW_HEIGHT);
UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:rect reuseIdentifier:identifier] autorelease];

UIImageView *myImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10.00, 10.00, 150.00, 100.00)];
myImageView.tag = IMAGE_TAG;
[cell.contentView addSubview:myImageView];
[myImageView release];

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(170.00, -10.00, 170.00, 80.00)];
label.tag = LABEL_TAG;
[label setBackgroundColor:[UIColor clearColor]];
[label setTextColor:[UIColor blackColor]];
[label setFont:[UIFont fontWithName:@"AmericanTypewriter" size:22]];
[label setTextAlignment:UITextAlignmentLeft];
[cell.contentView addSubview:label];
[label release];

if (row == 0)
{
    UIImageView *imageView = (UIImageView *)[cell viewWithTag:IMAGE_TAG];
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"cover_v.jpg"]];
    UILabel *mylabel = (UILabel *)[cell viewWithTag:LABEL_TAG];
    mylabel.text = [NSString stringWithFormat:@"COVER PAGE"];
}
   }

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Ааа, росомаха, ты совершаешь глупую ошибку:

В основном вы устанавливаете значение метки в

    if(cell==nil){
}

блок. Следовательно, значения повторяются, потому что они используются повторно и не устанавливаются для каждой ячейки.

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

Надеюсь, это поможет,

Спасибо

Madhup

0 голосов
/ 07 мая 2010

Вы должны предоставить imageView.image и label.text для всей таблицы:

UIImageView *imageView = (UIImageView *)[cell viewWithTag:IMAGE_TAG];
UILabel *mylabel = (UILabel *)[cell viewWithTag:LABEL_TAG];

if (row == 0)
{
    imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"cover_v.jpg"]];
    mylabel.text = [NSString stringWithFormat:@"COVER PAGE"];
}
else
{
    imageView.image = // ???
    mylabel.text = // ??
}

и, конечно, этот код должен быть вне фрейма "if (cell == nil) {...}".

...