Пользовательское значение TableViewCell исчезает при прокрутке вверх - PullRequest
0 голосов
/ 01 ноября 2011

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

я понимаю тамЕсть два способа решения этой проблемы, один - сохранить значение tableviewcell в массиве, а другой - избежать его повторного использования, но я не могу их реализовать,

У меня есть привычная ячейка tableview с одним текстовым полем внутри и кнопкой., когда кнопка нажала добавить еще одну ячейку таблицы в нижней части таблицы;

при реализации первого решения я получаю табличную ячейку из textfield.supperview следующим образом:

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"TextFileld Value : %@" , textField.text);

    DivideTableViewCell *cell = (DivideTableViewCell *)textField.superview;

    NSIndexPath *indexPath = [uiTableView indexPathForCell:cell]; 

    NSLog(@"index Path %i" , indexPath.row);
}

, но каждый разindexPath.row равен 0, и я не могу обновить свой массив источника данных ....

, а также, к сожалению, я не смог реализовать и второе решение ...

Так что спасибо за любую помощь:)

Ответы [ 2 ]

0 голосов
/ 21 августа 2012

I  Think you should store all the values of the text field in an array and replace with the changed value every time like i did,see my code ,


(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
static NSString *CellIdentifier = @"CustomCell";
{
CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; for (id currentObject in topLevelObjects) { if ([currentObject isKindOfClass:[UITableViewCell class]]) { cell = (CustomCell ) currentObject; break; } } } cell.capitalLabel.text =[capitals objectAtIndex:indexPath.row]; cell.stateLabel.text = [states objectAtIndex:indexPath.row]; cell.t1.delegate=self; cell.t1.tag=indexPath.row; cell.t1.text=[arrTemp objectAtIndex:indexPath.row]; cell.s1.backgroundColor=[UIColor grayColor]; cell.s1.contentSize=CGSizeMake(1000, 40); return cell; } } /-(BOOL)textFieldShouldReturn:(UITextField *)textField { [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text]; } */ -(void)textFieldDidEndEditing:(UITextField *)textField{ [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text]; }
0 голосов
/ 01 ноября 2011

Если вам нужно сохранить TableViewCells, попробуйте следующее.

Имейте переменную экземпляра NSMutableDictionary и выделите / инициализируйте ее в методе init TableViewController (не забудьте освободить ее в dealloc).

- (id)init {
  self = [super init];
  if (self) {
    ivarDictionary = [[NSMutableDictionary alloc] init];
  }
  return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  DivideTableViewCell *cell = [ivarDictionary objectForKey:[NSNumber numberWithInt:indexPath.row]];

  if (!cell) {
    cell = [[DivideTableViewCell alloc] init];
    [iverDictionary setObject:cell forKey:[NSNumber numberWithInt:indexPath.row]];
    // Cell setup 1
  }

  // Cell setup 2

  return cell;
}

Оттуда вы можете настроить все, что вам нужно для ячейки в области Setup 1, или, если вы хотите выполнять какую-либо настройку каждый раз, когда ячейка будет вызываться, используйте Setup 2.

Пожалуйста,обратите внимание, что это не очень хорошая идея с точки зрения минимизации использования памяти, я бы не стал использовать этот метод для чего-либо с более чем 20-30 ячейками.

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

...