2015-01-12 3 views
-1

Я использую TableView внутри ViewController. Существует два сценария, в которых есть 3 раздела и один, где есть 4.TableViewCell неправильно инициализируется

Когда приложение загружает значение по умолчанию - 3. Один из TableViewCells показывает другой ViewController, в котором пользователь делает выбор. Затем, используя обратную кнопку, они возвращаются к открытию VC, где таблица перезагружается.

Проблема возникает, когда пользователь перемещается из 4 разделов назад в 3. Как вы можете видеть в приведенном ниже коде, третий раздел (случай 2) реализует текстовый экран при отображении 4 разделов. Когда пользователь переместится на 3, текстовый элемент останется. Я предположил, что таблица начнется с нуля при перезагрузке. Вместо этого он сохраняет предыдущие настройки и добавляет новые настройки поверх.

Любые идеи, как остановить это? какой-то сброс?

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

{ 
    UITableViewCell *serverLocCell = [tableView dequeueReusableCellWithIdentifier:@"homeCell"]; 



     if (sections == 3) { 
      switch (indexPath.section) { 
       case 0: 
        if ([testLocation isEqualToString:@""]) { 
         serverLocCell.textLabel.text = @"Choose location"; 
        } 
        else { 
         serverLocCell.textLabel.text = testLocation; 
        } 

        serverLocCell.detailTextLabel.text = @"Change"; 
        serverLocCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

        break; 
       case 1: 
        serverLocCell.textLabel.text = testType; 
        serverLocCell.detailTextLabel.text = @"Change"; 
        serverLocCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
        break; 
       case 2: 
        serverLocCell.textLabel.text = @"Start Test"; 
        serverLocCell.textLabel.textColor = [UIColor whiteColor]; 
        serverLocCell.textLabel.textAlignment = NSTextAlignmentCenter; 
        serverLocCell.detailTextLabel.text = @""; 
        serverLocCell.accessoryType = UITableViewCellAccessoryNone; 
        serverLocCell.backgroundColor = [UIColor colorWithRed:0.0/255 green:102.0/255 blue:51.0/255 alpha:1.0]; 
        break; 
       default: 
        break; 
      } 
     } 
     else { 
      switch (indexPath.section) { 
       case 0: 
        if ([testLocation isEqualToString:@""]) { 
         serverLocCell.textLabel.text = @"Choose location"; 
        } 
        else { 
         serverLocCell.textLabel.text = testLocation; 
        } 

        serverLocCell.detailTextLabel.text = @"Change"; 
        serverLocCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

        break; 
       case 1: 
        serverLocCell.textLabel.text = testType; 
        serverLocCell.detailTextLabel.text = @"Change"; 
        serverLocCell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
        break; 
       case 2: 
        if ([testType isEqualToString:@"Published App Test"]) { 

         publishedAppTextField = [[UITextField alloc]init]; 
         publishedAppTextField.tag = 1; 
         [publishedAppTextField addTarget:self 
                action:@selector(textFieldDidChange:) 
             forControlEvents:UIControlEventEditingChanged]; 

         serverLocCell.textLabel.text = @""; 
         serverLocCell.accessoryType = UITableViewCellAccessoryNone; 
         publishedAppTextField.frame = CGRectMake(7, 10, 300, 30); 
         publishedAppTextField.clearsOnBeginEditing = YES; 
         publishedAppTextField.delegate = self; 
         publishedAppTextField.returnKeyType = UIReturnKeyDone; 
         [serverLocCell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
         [serverLocCell.contentView addSubview:publishedAppTextField]; 
         serverLocCell.backgroundColor = [UIColor whiteColor]; 
         break; 
        } 
        else { 

         break; 
        } 
       case 3: 
        serverLocCell.textLabel.text = @"Start Test"; 
        serverLocCell.textLabel.textColor = [UIColor whiteColor]; 
        serverLocCell.textLabel.textAlignment = NSTextAlignmentCenter; 
        serverLocCell.detailTextLabel.text = @""; 
        serverLocCell.accessoryType = UITableViewCellAccessoryNone; 
        serverLocCell.backgroundColor = [UIColor colorWithRed:0.0/255 green:102.0/255 blue:51.0/255 alpha:1.0]; 
        break; 
       default: 
        break; 
      } 

     } 
    return serverLocCell; 
} 

Спасибо,

+0

как вы отслеживании 'sections'? – KDaker

+0

Подсказка: ячейки перерабатываются. –

ответ

1

Что происходит, вероятно, из-за, используя тот же идентификатор соты. Используйте два разных идентификатора CellIdentifiers для каждого сценария (3 и 4 раздела). Так что это может выглядеть примерно так:

if (sections == 3) { 
    serverLocCell = [tableView dequeueReusableCellWithIdentifier:@"homeCell1"]; 
    ... 
} else if (sections == 4) { 
    serverLocCell = [tableView dequeueReusableCellWithIdentifier:@"homeCell2"]; 
    ... 
} 

надеюсь, что это помогает

+0

Спасибо, что сработало –

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