2016-10-13 6 views
0

У меня есть настроенные UITableViewCells, которые содержат UITextView и набор кнопок. Кнопки в ячейке должны быть видны только тогда, когда пользователь пытается отредактировать текстовое представление в соответствующей ячейке. Итак, если пользователь пытается отредактировать текстовое представление в ячейке1, тогда набор кнопок должен быть видимым под текстовым видом в ячейке1, а высота ячейки1 также должна быть увеличена. Теперь, если пользователь пытается отредактировать текстовое представление в ячейке2, тогда набор кнопок должен быть видимым под текстовым видом в ячейке2, а высота ячейки2 также должна быть увеличена, тогда как кнопки в ячейке 1 должны быть удалены, а размер ячейки должен быть соответственно.Обновить вид таблицы при редактировании UITextView внутри UITableViewCells

Для этого я попытался перезагрузить ячейки представления таблицы из textViewDidBeginEditing :. Это правильно загружает ячейки и отображает/скрывает кнопки в необходимых ячейках, но не позволяет правильно редактировать текстовое представление. Когда пользователь пытается отредактировать текстовое представление, методы перезагрузки tableview вызываются постоянно и не позволяют клавиатуре стоять для редактирования.

Правильно ли обрабатывать перезагрузку из textViewDidBeginEditing: на первом месте? есть ли лучший способ сделать это? пожалуйста помоги.

+0

поместить код, который вы используете в вашем проекте –

ответ

0

Сначала я предлагаю не перезагружать весь TableView каждый раз. Вместо этого используйте

reloadRowsAtIndexPaths 

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

Далее, чтобы решить вашу проблему в отношении textView, вы можете сделать что-то вроде этого, объявить свойство класса типа bool и установить его в false. Когда вы перезагружаете свою ячейку в первый раз, установите для нее значение true. Теперь в методе редактирования textViewDidBegin проверьте этот bool. Если для него установлено значение true, это означает, что вы уже загрузили ячейку, и вам не нужно ее снова загружать, поэтому в этом случае не вызывайте метод reloadRows. Если это неверно, перезагрузите строки и установите для этого bool значение true. Теперь в методе делегата textViewDidEndEditing снова установите этот bool в false, так что, когда пользователь вступает в другой текстовый файл в другой строке, он перезагружается должным образом.

Эта логика может быть не идеальной, вам может потребоваться некоторая настройка. Но это будет получить работу

0

Явное сделать текстовое поле, как firstResponder

if buttonsDisplayed == NO { 
reload cell 
} 
if textFieldIsFirstResponder == NO { 
[textField becomeFirstResponder]; 
}