2015-06-11 2 views
0

Я пытаюсь получить пользовательскую ячейку tableView с textView внутри работы в моем TableView. Я создал пользовательский UITableViewCell с текстовым элементом внутри него.быстрый пользовательский UITableViewCell с TextView внутри исчезает

Я могу получить пользовательский UITableViewCell с текстом внутри, чтобы появиться в UITableView.

Я могу щелкнуть внутри textView, чтобы набрать что-то, но когда я закончу набирать и нажимаю на другой tableViewCell, первый tableViewCell с textView внутри исчезает. После исчезновения он становится пустой таблицейViewCell. XCode выдает это сообщение: «Нет указательного пути для повторного использования ячейки таблицы»

Однако, когда я прокручиваюсь в таблицеView и прокручиваю назад до пустого tableViewCell, он снова появляется. Я не знаю, как избежать исчезновения tableViewCell. Кажется, что ответ имеет какое-то отношение к использованию функции restoreIdentifier внутри UITableView, но я не уверен, как его использовать. В документах говорится, что для сохранения состояния используется initialIdentifier.

Вот соответствующий код у меня есть:

inside ViewDidLoad(): 
tableView.registerClass(PhotoAndRateTableViewCell.classForCoder(), forCellReuseIdentifier: ReuseIds.reviewCell) 
tableView.registerNib(UINib(nibName: "PhotoAndRateTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: ReuseIds.reviewCell) 

внутри cellForRowAtIndexPath:

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

    var section = indexPath.section 

    let cell = UITableViewCell() 
     var cell = tableView.dequeueReusableCellWithIdentifier(ReuseIds.reviewCell, forIndexPath: indexPath) as PhotoAndRateTableViewCell 

    cell.selectionStyle = UITableViewCellSelectionStyle.None 

    return cell 
} 
+0

Где вы создаете ваш текст? – Lytic

+0

textView создается в файле xib для пользовательского tableViewCell. Файл - PhotoAndRateTableViewCell.xib. Таким образом, я могу использовать autoLayout. – mjpablo23

+0

Я могу заставить tableViewCell снова появиться, используя: func textViewDidEndEditing (textView: UITextView) { tableView.reloadData() }. Однако данные внутри не сохраняются. – mjpablo23

ответ

0

Вы злоупотребляя процедуру DEQUEUE:

var cell = tableView.dequeueReusableCellWithIdentifier(ReuseIds.reviewCell, forIndexPath: indexPath) as? PhotoAndRateTableViewCell 

if (cell == nil) { 
    cell = PhotoAndRateTableviewCell(); 
} 

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

Что касается сохранения данных, вам необходимо внедрить метод prepareForReuse в ячейке таблицы, который должен очистить все данные, определенные индексом, в ячейке. Затем в cellForRow вы можете повторно установить данные для ячейки для повторного появления

+0

Я попытался ввести это, но для (cell == nil) XCode имеет ошибку, говоря «Не могу вызывать '==' с помощью списка аргументов типа (UITableViewCell, NilLiterl ... – mjpablo23

+0

Я получил чек (cell == nil), но та же проблема все еще возникает. Из документации, похоже, мне нужно реализовать протокол UIDataSourceModelAssociation. Однако, похоже, нет примеров этого в tableView – mjpablo23