2016-07-16 8 views
2

Я создаю форму в UITableViewCell, эта форма имеет макет и текстовое поле в ячейке прототипа. См. Его изображение здесь TableView Story board Image. Я использую идентификатор, чтобы динамически создать форму, мой кодUITableViewCell Данные изменяются после прокрутки

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("protocell", forIndexPath: indexPath) as! UITableViewCell 

    var lable = cell.viewWithTag(1) as! UILabel 
    lable.text = details[indexPath.row] 
    lable.textColor = UIColor.brownColor().colorWithAlphaComponent(0.7) 

    var textfield = cell.viewWithTag(2) as! UITextField 
    textfield.placeholder = "Enter \(details[indexPath.row])" 
    self.arrayTextField.append(textfield) 
    if details[indexPath.row] == "Name" { 
     textfield.placeholder = "Enter First \(details[indexPath.row]) Middle \(details[indexPath.row]) Last \(details[indexPath.row]) " 
    } 
    textfield.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.2) 

    return cell 
} 

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

+0

Вам нужно отслеживать в своем источнике данных, текстовое поле которого имеет текст. Поэтому, когда в 'tableView: (tableView: cellForRowAtIndexPath:)' есть один, вы его положили, иначе вы кладете свое местоHolder, потому что ячейки повторно используются. – Larme

+0

** Никогда ** используйте массивы, содержащие элементы пользовательского интерфейса элементов таблицы ('arrayTextField'). Вероятно, это причина вашей проблемы. Подумайте о том, чтобы улучшить дизайн модели (источника данных), изменить данные в модели и перезагрузить представление таблицы. – vadian

+0

для отслеживания источника данных Я использую 'arrayTextField' @Larme, как отслеживать в источнике данных, чтобы увидеть, какое текстовое поле имеет текст. Я искал, но ничего не нашел. – knownUnknown

ответ

2

Создать UITableViewCell подкласс и переопределить prepeareForReuse function - превратить ячейку в режим по умолчанию.

Swift:

override func prepareForReuse() { 
    super.prepareForReuse() 

    //set cell to initial state here, reset or set values, etc. 
} 

В соответствии с Вашим комментарием - как подкласс UITableViewCell:

import UIKit 

class MyCustomCell: UITableViewCell { 
    // things that you can do here: 
    // initialise your properties here. (label, textfield. etc) 
    // layout subviews. 
    // override superclass APIs. 
} 
+0

Я новичок в разработке приложений iphone, так что @Evegeny Karkan вы можете показать мне, как создать подкласс. – knownUnknown

+0

@AdnanMomin см. Обновления моего ответа. –

0
  1. Не храните текстовые поля в массиве вместо DataSource "Детали" массив должен это сделать ,
  2. После того, как вы ввели какую-либо вещь в обновлении текстового поля, вы получите «подробный» массив для этого indexPath.
  3. Подкласс UITableViewCell и сделать CustomTableViewCell и имеют IBOutlets для вас TextFields этикетки и что не сделать вашу жизнь проще
  4. Есть метод на вашем CustomTablewViewCell как updateWithDetails(details), так что код хорошо инкапсулированных
+0

my ** details ** array, содержит метки для полей, поэтому я не могу его обновить. – knownUnknown

+0

, а затем удалите их из массива. Ваш массив данных должен содержать некоторый объект, например EmployeesDetails * employeeDetails, а затем массив должен быть затем usedeDetailsArray. И тогда для каждого EmployeeDetails может быть «информация» как строка, а не текстовое поле. Ваш источник данных не должен содержать какие-либо элементы пользовательского интерфейса. – hariszaman

+0

мой массив данных подобен 'details = [" name "," address ", contactnumber",] 'и так далее. – knownUnknown

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