Подключение ячеек UITableView обратно к источнику данных - PullRequest
0 голосов
/ 06 мая 2011

У меня есть бумажная форма с множеством разных разделов, в каждом из которых есть несколько разных вопросов. Я отображаю это как UITableView. Каждый вопрос отображается как UITableViewCell с самим вопросом и как UITextField для ответа. UITableView в настоящее время поддерживается двумя типами объектов, Разделом и Вопросом, причем каждый объект Раздела содержит массив Вопросов.

Мне интересно, как я могу легко связать любое редактирование, которое происходит в UITableView с объектами. Например, если пользователь вводит ответ на вопрос 1, я бы хотел иметь возможность назначить этот текст ответа соответствующему объекту Вопрос.

Что я сейчас делаю, так это присваиваю каждому UITextField уникальный тег, а затем сохраняю указатель на каждый объект Question в словаре со значениями тегов в качестве ключей. Затем, когда запускается соответствующий метод делегата UITextField, я ищу объект в словаре через тег UITextField.

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

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Если я не правильно понял вопрос, почему бы просто не использовать протокол UITextFieldDelegate, чтобы сообщить объекту, что текстовое поле завершило редактирование.

Вы бы просто сделали следующее: Сделайте ваш вопрос UITextFieldDelegate. Затем определите textFieldDidEndEditing в вашем классе реализации Вопроса

- (void)textFieldDidEndEditing:(UITextField *)textField {
    mAnswer = textField.text;
}

Это должно сделать это правильно? Когда текстовое поле заполнено, объект Question получает ответ.

1 голос
/ 06 мая 2011

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

UITextField *someTextField;
UIView *contentView = [someTextField superView];
UITableViewCell *cell = (UITableViewCell *)[contentView superView];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
0 голосов
/ 06 мая 2011

Подобно тому, что сказал Родерик, я бы соблазнился:

Передайте объект в ячейку просмотра таблицы (установите эту ячейку просмотра таблицы как делегат текстового поля) и присвойте значение, введенное непосредственно объекту в

- (void)textFieldDidEndEditing:(UITextField *)textField

Или присвойте каждой ячейке уникальный идентификатор, который относится к объекту и тем же методом

 - (void)textFieldDidEndEditing:(UITextField *)textField

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...