предыдущий текст в метке в табличном представлении отображается после перезагрузки табличного представления - PullRequest
1 голос
/ 08 февраля 2012

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

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

static NSString *CellIdentifier = @"Cell";


UITableViewCell *cell = [self.tableview dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
 reuseIdentifier:CellIdentifier] autorelease];    
  }

UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(45, 8, 100, 25)];
nameLabel.backgroundColor = [UIColor clearColor];
nameLabel.font = [UIFont fontWithName:@"Arial" size:16];
nameLabel.text = [[itemsArray objectAtIndex:indexPath.row] objectForKey:@"itemname"];
[cell addSubview:nameLabel];
[nameLabel release];

UIButton *deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
deleteButton.frame= CGRectMake(3, 3, 30, 30);
[deleteButton setImage: [UIImage imageNamed:@"cross_btn.png"] forState:UIControlStateNormal];
[cell addSubview:deleteButton];


UILabel *priceMark = [[UILabel alloc]initWithFrame:CGRectMake(150, 8, 65, 25)];
priceMark.backgroundColor = [UIColor clearColor];
priceMark.font = [UIFont fontWithName:@"Arial" size:14];
priceMark.text = [NSString stringWithFormat:@"Rs: %@",[[itemsArray objectAtIndex:indexPath.row] 
objectForKey:@"amount"]];
[cell addSubview:priceMark];     
[priceMark release];

UILabel *qtyLabel = [[UILabel alloc]initWithFrame:CGRectMake(225, 8, 60, 25)];
qtyLabel.backgroundColor = [UIColor clearColor];
qtyLabel.font = [UIFont fontWithName:@"Arial" size:14];
qtyLabel.text = [[itemsArray objectAtIndex:indexPath.row] objectForKey:@"qty"];
[cell addSubview:qtyLabel];
[qtyLabel release];

return cell;
} 

РЕДАКТИРОВАТЬ 2

Теперь я получаю другую проблему, когда я обновляю массив элементов, который глобальнообъявляется с индексом 0 и возвращается обратно, тогда он не будет обновлять строку в строке табличного представления с индексом 0, но когда я обновляю другие строки, он обновляется.А также, когда я прокручиваю табличное представление вверх, тогда оно показывает значение по индексу 0 по всему индексу.вот мой код

    - (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] autorelease];    
    nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(45, 8, 100, 25)];
    nameLabel.backgroundColor = [UIColor clearColor];
    nameLabel.font = [UIFont fontWithName:@"Arial" size:16];
    [cell addSubview:nameLabel];

    deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
    deleteButton.frame= CGRectMake(3, 3, 30, 30);
    [deleteButton setImage: [UIImage imageNamed:@"cross_btn.png"] forState:UIControlStateNormal];
    [cell addSubview:deleteButton];

    priceMark = [[UILabel alloc]initWithFrame:CGRectMake(200, 8, 60, 25)]; //150, 8, 65, 25
    priceMark.backgroundColor = [UIColor clearColor];
    priceMark.font = [UIFont fontWithName:@"Arial" size:14];
    [cell addSubview:priceMark]; 

    qtyLabel = [[UILabel alloc]initWithFrame:CGRectMake(160, 8, 65, 25)]; //225, 8, 60, 25
    qtyLabel.backgroundColor = [UIColor clearColor];
    qtyLabel.font = [UIFont fontWithName:@"Arial" size:14];
    [cell addSubview:qtyLabel];
}


 nameLabel.text = [[itemsArray objectAtIndex:indexPath.row] objectForKey:@"itemname"];
  priceMark.text = [NSString stringWithFormat:@"Rs: %@",[[itemsArray 
  objectAtIndex:indexPath.row] objectForKey:@"amount"]];
   qtyLabel.text = [[itemsArray objectAtIndex:indexPath.row] objectForKey:@"qty"];

return cell;
    }

1 Ответ

3 голосов
/ 08 февраля 2012

Вы не должны создавать новые UILabels и UIButton и добавлять их как подпредставление каждый раз.Ваша проблема здесь в том, что вы добавляете новые каждый раз.Вы должны создать пользовательский UITableViewCell с метками и кнопками и установить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...