2010-08-10 2 views
0

Я использую представление таблицы для редактирования объекта.Изменение меток в uitableview

Я использую ниже код для создания ячейки uitableview.

Он работает красиво, но каким-то образом, прокручивая ячейки, меняющиеся внутри.

static NSString *CellIdentifier2 = @"CustomCell Editable Identifier"; 

     cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier2]; 
     if (cell == nil) { 

      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 
              reuseIdentifier:CellIdentifier2] autorelease]; 


      cell.textLabel.text = rowLabel; 

      UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 10, 170, 25)]; 

      theTextField.textAlignment = UITextAlignmentRight; 

      cell.editingAccessoryView =theTextField; 
      theTextField.tag = 602; 
      if ([rowKey isEqualToString:@"phone_no"]) { 
       [theTextField setKeyboardType:UIKeyboardTypeNumberPad]; 
      } 
      theTextField.text = [rowValue ddEventValueDisplay]; 
      [theTextField release]; 
      return cell; 

Может ли кто-нибудь сказать мне, где я ошибаюсь?

+0

, пожалуйста, покажите весь код и опишите, что именно изменяется при прокрутке. Откуда взялась эта строкаLabel? – mvds

+0

Кроме того, пожалуйста, отрежьте все void и прокомментированный код (например, «label» здесь не подходит) – mvds

+0

Это содержимое ячейки изменяется внутри, как cell1 на cell3 и cell3 на cell1. rowLabel - это просто строка, поступающая из массива. – harshalb

ответ

1

Вы создаете метку, когда ячейкой является NIL. Поэтому каждый раз, когда вы прокручиваете, вызываете cellForRowAtIndexPath, и он проверяет, является ли ячейка NIL (а это не в этот раз), поэтому ничего не выполняется, если она находится в if (cell == NILL).

Так, чтобы установить текст метки вам необходимо виноградного эту этикетку с точки зрения клетки, а затем установить текст как:

UITableViewCell * ячейка = [Tableview dequeueReusableCellWithIdentifier: CellIdentifier];

, если (ячейка == ноль) {

клеток = [[[UITableViewCell Alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease];

a = [[UILabelView alloc] init]; 
a.tag = 10; 
[cell.contentView addSubview:a]; 

}

UILabelView * AView = [cell.contentView viewWithTag: 10];

aView.text = @ "Некоторые тексты";

[cell.contentView addSubview: a];

return cell; 

}

+0

безупречный. прямо в точку. :) – harshalb

1

Код выше в вашем cellForRowAtIndexPath вызова, не так ли?

Я не уверен, что это было результатом сбоя копирования и вставки, но вы хотите завернуть блок «if (cell == nil)» сразу после вызова initWithStyle, в приведенном выше коде отсутствует конечная фигурная скобка.

0

Похоже, вы настраиваете ячейку только при ее создании. Но когда вы получаете многоразовые клетки от

cell = [theTableView dequeueReusableCellWithIdentifier:CellIdentifier2]; 

вы не изменить - но вы должны, они случайны: например, вам нужна ячейка для строки = 1 и полученная повторно использованная ячейка из строки = 3

кстати: всегда лучше обеспечить весь код - вы не должны заставлять peole угадывать, что вы имеете в виду.

Смежные вопросы