2014-01-26 5 views
1

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

Table view after load

Проблема у меня, что когда я прокручиваю любого из ячеек «с экрана», когда они появляются в тексте заполнителя получить темнее и темнее, как здесь:

Darker placeholder text

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

enter image description here

Вот методы, отвечающие за конфигурирование этих клеток:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    // Configure the cell... 
    [self configureCell:cell forIndexPath:indexPath]; 

    return cell; 
} 

- (void)configureCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath 
{ 
    for (UIView *subview in cell.contentView.subviews) { 
     [subview removeFromSuperview]; 
    } 

    cell.backgroundColor = [UIColor whiteColor]; 
    cell.autoresizesSubviews = YES; 
    cell.clearsContextBeforeDrawing = YES; 
    CGRect textFieldFrame = cell.bounds; 
    textFieldFrame.origin.x += 10; 
    textFieldFrame.size.width -= 10; 

    UITextField *textField = [[UITextField alloc] initWithFrame:textFieldFrame]; 
    textField.adjustsFontSizeToFitWidth = YES; 
    textField.textColor = [UIColor lightGrayColor]; 
    textField.enabled = YES; 
    textField.userInteractionEnabled = NO; 
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    textField.clearsContextBeforeDrawing = YES; 
    textField.clearsOnBeginEditing = YES; 

    if (indexPath.section == ATTAddNewTimerSectionName) { 
     textField.placeholder = @"Name"; 
     textField.userInteractionEnabled = YES; 
     textField.delegate = self; 
     textField.returnKeyType = UIReturnKeyDone; 
     textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
    } else if (indexPath.section == ATTAddNewTimerSectionDate) { 
     textField.placeholder = @"Date/Time"; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } else if (indexPath.section == ATTAddNewTimerSectionCalendar) { 
     if (self.userCalendarEvent == nil) { 
      textField.placeholder = @"See list of calendar events"; 
     } else { 
      textField.placeholder = nil; 
      textField.placeholder = self.userCalendarEvent.title; 
     } 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
    } 
    [cell addSubview:textField]; 
} 

Как вы можете видеть, я пробовал разные вещи, как удаление всех subviews перед добавлением нового представления в ячейку или настройку - [UIView setClearsContextBeforeDrawing: YES] как для ячейки, так и для UITextView и даже для установки значения-заполнителя нуль без успеха.

Любые указатели были бы очень признательны!

ответ

2

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

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

Вы хотите добавить только одно текстовое поле в ячейку. Обновите свой код, чтобы он только добавлял текстовое поле, если его еще нет.

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

Изменить это:

[cell addSubview:textField]; 

к:

[cell.contentView addSubview:textField]; 
+0

Да, это проблема. Если вы видите перекрытие текста с заполнителем, это возможно, потому что есть> = 2 UITextFields в том же положении – onmyway133

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