2012-05-14 4 views
0

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

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

NSString *cellValue = ((UITextField *)[[[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]] contentView] viewWithTag:[self.table cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1]].tag]).text; 

Я думал, чтобы сохранить значение, которое пользователь вводит в UITextField, но если пользователь нажимает на строку, которая выполняет Вычислить делегат textFieldDidEndEditing не вызывается.

Я не знаю, как я могу получить эти значения безопасным способом.

ответ

4

Вы должны настроить таргетинг на источник данных, который находится за UITableView. UITableView - это всего лишь механизм отображения, а не основной ресурс для получения данных. Вы можете получить индекс для ячейки на основе заголовка, но тогда я бы посмотрел на источник данных, чтобы получить ваши фактические данные. Лучше всего я бы просто справился со всеми операциями против самого источника данных, если это возможно. Когда вы сначала создаете таблицу, ваш источник данных представляет собой список или массив какого-то рода, я уверен, что вы можете просто использовать его. Вам может понадобиться создать переменную в представлении и сохранить там список/массив, чтобы убедиться, что у вас есть это, и вы должны быть настроены.

Удачи!

+0

То, что я сделал это, чтобы создать два свойства UITextField в моем представлении. Затем, когда я создаю ячейку, я добавляю в ячейку желаемый UITextView. И когда мне нужно получить доступ к данным, я просто делаю NSString * txtValue = self.txtField1.text; – FreelanceAr

0

Что происходит, скорее всего, это повторное использование ячеек. Поэтому, когда ваша ячейка с текстовым полем отключается, она снова используется, поэтому вы больше не можете ее получить. То, что вам нужно будет сделать, это захватить значение из текстового поля сразу после его ввода и сохранить его где-нибудь. Вы можете использовать – textField:shouldChangeCharactersInRange:replacementString:, так что когда пользователь вводит символ в текстовое поле, вы можете сохранить строку.

1

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

Это означает, что вы, вероятно, не видите данные, которые ожидаете, потому что вы используете выделенные ячейки. Если количество ячеек невелико, вы можете подумать о кешировании своих собственных ячеек в NSDictionary, чьими ключами являются некоторая комбинация раздела и строки и доступ к их иерархии представлений через ваш собственный кеш.

0

Вы можете получить доступ к строкам, которые в настоящее время не отображаются, напрямую ссылаясь на tableViewdataSource с нужным IndexPath.

Вы можете добиться этого, делая что-то вроде этого (при использовании Swift 3):

UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)

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