Как обновить UITextField в UITableViewCell после выбора данных из модального - PullRequest
1 голос
/ 13 марта 2012

У меня есть табличное представление с UITextFields для построения формы. Затем у меня есть кнопка на панели инструментов, которая запускает модальный контроллер представления, чтобы выбрать некоторые данные, которые затем передаются обратно в табличное представление. Однако новые выбранные данные не обновляются в UITextField с использованием синтаксиса textField.text = valueReturnedFromModal. Я что-то упускаю?

Я вижу, что данные возвращаются с модального канала, так что проблема не в этом. У меня просто проблемы с принудительным обновлением UITextField новыми данными. Я также пытался принудительно использовать reloadData для таблицы.

Итак, с модальной точки зрения, вот код, который передает данные обратно:

- (void)doneAccountSelection:(id)sender
{
    [delegate didSelectAccount:currentAccount];
    [self dismissModalViewControllerAnimated:YES];
}

и вот фактический метод в делегате:

- (void)didSelectAccount:(SFAccount *)selectedAccount
{
    //Ensure a valid deal exists for the account to be attached to
    [self createDealObjectIfNeeded];

    //Set the deal account
    [self.deal setAccount:selectedAccount];

    //Refresh the text fields
    //Tag 3: Account Name field
    UITextField *acct_name = (UITextField *) [self.view viewWithTag:3];
    [acct_name setText:self.deal.account.field_acct_name_value];

    //Tag 4: Account City field
    UITextField *acct_city = (UITextField *) [self.view viewWithTag:4];
    [acct_city setText:self.deal.account.field_acct_city_value];

    //Save the context changes. A new deal gets created above if one does not exist.
    if ([self saveModel]) NSLog(@"Acct object created, attached to deal successfully!");

    [self.tableView reloadData];
}

Ответы [ 3 ]

0 голосов
/ 14 марта 2012

Не могли бы вы опубликовать код, который устанавливает данные текстовых полей, и код, который передает данные обратно в табличное представление?

Ответ:

Похоже, что вы правильно настраиваете данные, однако вы отказываетесь от контроллера модального представления после отправки сообщения делегата. В этом случае табличное представление даже не создается до тех пор, пока не завершится dismissModalViewControllerAnimated :. Это означает, что текстовые поля равны NULL, пока представление не присутствует. Я предлагаю позвонить

[self dismissModalViewControllerAnimated:YES];

как первая строка в методе didSelectAccount: делегата. Это приведет к отклонению модального представления, а затем продолжит настройку данных на допустимые текстовые поля, как -viewWillAppear: / -viewDidAppear: уже был вызван. Кажется, все в порядке, это просто порядок, который может сбить вас с толку. Хотя

-dismissModalViewControllerAnimated:

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

0 голосов
/ 14 марта 2012

После некоторой серьезной отладки обнаружилось, что self.account использовалось в cellForRowAtIndexPath для установки начальных значений UITextField в UITableViewCell.Затем после завершения модального выбора я только обновлял ссылку на счет для объекта сделки, а не обновлял объект self.account.

Затем я добавил к этому, создав новый метод с именем updateTextFieldsAfterModalFinished и переместив кодобновить UITextField s там.Затем этот метод вызывается из didSelectAccount, который является методом делегата для модального представления, который отклоняется.Теперь все работает как положено, и UITextFields обновляется после завершения модального выбора.

0 голосов
/ 13 марта 2012

используйте это после получения значения в текстовом поле:

[self.tableView ReloadData];
...