如何在从模态中选择数据后刷新UITableViewCell中的UITextField

时间:2012-03-13 17:22:25

标签: ios uitableview uitextfield modalviewcontroller

我有一个带UITextFields的tableview来构建表单。然后我在工具栏中有一个按钮,它启动一个模态视图控制器来选择一些数据然后传回到tableview。但是,使用textField.text = valueReturnedFromModal语法时,所选的新数据不会刷新到UITextField中。有什么我想念的吗?

我看到数据正在从模态中正确返回,因此不是问题。我只是在强制UITextField用新数据刷新时遇到了麻烦。我也试过在tableview上强制重载数据。

所以从模态视图来看,这是传回数据的代码:

- (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 :(得分:0)

在文本字段中获取值后使用此选项:

[self.tableView ReloadData];

答案 1 :(得分:0)

您是否介意发布设置文本字段数据的代码以及将数据传递回表视图的代码?

答案:

您似乎正在正确设置数据,但是,在发送委托消息后您将关闭模态视图控制器。在这种情况下,甚至在dismissModalViewControllerAnimated:结束之后才创建表视图。这意味着在视图存在之前,文本字段为NULL。我建议打电话

[self dismissModalViewControllerAnimated:YES];

作为didSelectAccount:delegate方法的第一行。这将关闭模态视图,然后继续将数据设置为有效的文本字段为-viewWillAppear:/ -viewDidAppear:已经被调用。一切似乎都好,这只是可能让你绊倒的顺序。虽然

-dismissModalViewControllerAnimated:
如果视图控制器没有模态视图(因为它是模态视图),

会传递给它的父视图,在委托方法中调用此方法似乎更合适,因为新数据最终会操纵视图等等。

答案 2 :(得分:0)

经过一些严肃的调试后发现self.account正在使用cellForRowAtIndexPath来设置UITextField中的初始UITableViewCell值。然后在模态选择完成后,我只更新了交易对象的账户参考,而没有更新self.account对象。

然后我通过创建一个名为updateTextFieldsAfterModalFinished的新方法添加到此处,并移动代码以更新UITextField。然后从didSelectAccount调用此方法,这是被取消的模态视图的委托方法。事情现在按预期工作,UITextFields在模态选择完成后得到更新。