Ниже приведен мой метод cellForRowAtIndexPath.

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

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@""];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:nil];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }



    self.productAmountLabel = [[UILabel alloc]init];
    self.productAmountTextLabel = [[UILabel alloc]init];

    if (IS_IPHONE_4_OR_LESS || IS_IPHONE_5)
    {
        self.productAmountLabel.frame = CGRectMake(75, 145, 100, 30);
        self.productAmountTextLabel.frame = CGRectMake(117, 145, 100, 30);

    }
    else if (IS_IPHONE_6)
    {

        self.productAmountLabel.frame = CGRectMake(75, 145, 100, 30);
        self.productAmountTextLabel.frame = CGRectMake(117, 145, 100, 30);
    }
    else if (IS_IPHONE_6P)
    {

        self.productAmountLabel.frame = CGRectMake(75, 145, 100, 30);
        self.productAmountTextLabel.frame = CGRectMake(117, 145, 100, 30);

    }




    self.productAmountLabel.text = @"Amount:";
    self.productAmountLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];

    //    self.productAmountTextLabel.text =  [NSString stringWithFormat:@"%@",amountArray[indexPath.row]];
    //    self.productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];

    self.productAmountTextLabel.text = amountArray[indexPath.row];
    self.productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];


    tableView.tableFooterView = [UIView new];

    cell.layer.borderWidth = 1.0;
    cell.layer.cornerRadius = 10;
    cell.layer.borderColor = [UIColor blackColor].CGColor;



    [cell.contentView addSubview:self.productAmountLabel];
    [cell.contentView addSubview:self.productAmountTextLabel];

    //    cell.layer.shadowColor = [[UIColor blackColor] CGColor];
    //    cell.layer.shadowOffset = CGSizeMake(0.0f,0.0f);
    //    cell.layer.shadowOpacity = 0.7f;
    //    cell.layer.shadowRadius = 4.0f;
    //[cell.layer setMasksToBounds:YES];

    return cell;
}

Проблема в том, что когда я говорю amountArray [indexPath.row], он должен отображать два уникальных значения, но одно и то же значение отображается несколько раз. Я даже зациклился на представлении таблицы, чтобы проверить, есть ли у него два значения, и это так, но при его отображении одно и то же значение отображается несколько раз.

1
user3600801 22 Мар 2016 в 13:05

3 ответа

Лучший ответ

Проблема при выполнении addSubview с UITableViewCell заключается в том, что он будет добавляться несколько раз при вызове cellForRow:atIndexPath.

Решить проблему можно двумя способами:

  1. Создайте настраиваемую ячейку с настраиваемыми метками, уже добавленными при инициализации. В этом случае вам не нужно делать addSubview в cellForRow.
  2. Удалите все подпредставления в cellForRow перед добавлением любых подвидов, например:

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

В качестве быстрого исправления будет работать подход 2, но подход 1 лучше, поскольку вы избегаете ненужного добавления / удаления подвидов.

ИЗМЕНИТЬ

При пересмотре есть третий путь. Инициализируйте свои ярлыки ранее и добавьте ярлыки в качестве подпредставлений в блоке (cell == nil):

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

    UITableViewCell *cell = nil;
    cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@""];
    self.productAmountLabel = [[UILabel alloc]init];
    self.productAmountTextLabel = [[UILabel alloc]init];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:nil];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        [cell.contentView addSubview: self.productAmountLabel];
        [cell.contentView addSubview: self.productAmountTextLabel];
    }

// remaining code, but do not call `addSubview` after this point

}
1
Vinod Vishwanath 22 Мар 2016 в 10:37

Вам нужно добавить dequeueReusableCellWithIdentifier вот так

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

{

static NSString *cellId=@"reuseid";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];

if (cell == nil)

{

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                  reuseIdentifier:cellId];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

}

self.productAmountLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 0, 100, 20)];
self.productAmountTextLabel = [[UILabel alloc]initWithFrame:CGRectMake(10,25, 100, 20)];


self.productAmountLabel.text = @"Amount:";
self.productAmountLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];


self.productAmountTextLabel.text = [amountArray objectAtIndex:indexPath.row];
self.productAmountTextLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];

tableView.tableFooterView = [UIView new];
cell.layer.borderWidth = 1.0;
cell.layer.cornerRadius = 10;
cell.layer.borderColor = [UIColor blackColor].CGColor;

[cell.contentView addSubview:self.productAmountLabel];
[cell.contentView addSubview:self.productAmountTextLabel];
return cell;

}

0
Uma Madhavi 22 Мар 2016 в 10:54

Сделайте как ниже код:

 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *indentifier = @"indentifier";

   // Here I am creating cell in XIB -----------

   Team_TableViewCell *Cell = (Team_TableViewCell *)[tableView dequeueReusableCellWithIdentifier:indentifier];
   if (Cell == nil)
   {
       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Team_TableViewCell" owner:self options:nil];
       Cell = [nib objectAtIndex:0];
   }

   // My required lable--------
   Cell.titleLbl.text = reportees.name;
   Cell.pointEarnedLbl.text = reportees.points;
   Cell.titleLbl.textColor=APP_HOME_TABLE_HEADER_COLOR;
   [Cell setSelectionStyle:UITableViewCellSelectionStyleNone];
   [Cell setAccessoryType:UITableViewCellAccessoryNone];

   return Cell;
}

Примечание: Установите идентификатор в табличном представлении также, если вы создаете в XIB ..

1
Soumya Ranjan 22 Мар 2016 в 10:19