2012-03-13 41 views
1

我有一個使用UITextFields的tableview來構建表單。然後我在工具欄中有一個按鈕,它啓動一個模式視圖控制器來選擇一些數據,然後傳回到tableview。但是,選中的新數據不會使用textField.text = valueReturnedFromModal語法刷新到UITextField中。有什麼我失蹤?如何在從模式中選擇數據後刷新UITableViewCell中的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]; 
} 

回答

0

經過一番嚴肅的調試發現self.account被用於cellForRowAtIndexPath設置的初始UITextField值在UITableViewCell內。然後,模式選擇完成後,我只更新交易對象的帳戶參考,而不更新self.account對象。

然後,我創建了一個名爲updateTextFieldsAfterModalFinished的新方法,並將代碼移動到更新UITextField的地方。然後從didSelectAccount調用該方法,該方法是被解散的模態視圖的委託方法。事情現在按預期工作,在模式選擇完成後UITextFields得到更新。

0

利用這個得到的文本字段值後:

[self.tableView ReloadData]; 
+0

如果我正確理解你的答案,那麼textfield不會啓動模態視圖,所以這將無法正常工作。模式視圖將數據返回到tableviewcontroller中的委託方法,並且在該函數中,我需要更新文本字段中的文本。 – 2012-03-13 17:53:54

0

你介意發佈設置文本字段數據的代碼和代碼pa將數據提交回表格視圖?

答:

看來,你是正確的設置數據,但是,您要發送的代理消息後解僱模態視圖控制器。在這種情況下,表視圖甚至在dismissModalViewControllerAnimated:結束之後才創建。這意味着在視圖出現之前文本字段爲NULL。我建議的是撥打

[self dismissModalViewControllerAnimated:YES]; 

作爲didSelectAccount:delegate方法的第一行。這將消除模態視圖,然後繼續將數據設置爲有效文本域,如-viewWillAppear:/ -viewDidAppear:將被調用。一切似乎都沒問題,這只是可能讓你失望的命令。雖然

-dismissModalViewControllerAnimated: 

傳遞給其父如果視圖控制器沒有模態的視圖(因爲它是模態視圖),它似乎更適合調用此方法的委託方法,你最終會操縱查看由於新數據等原因

+0

我已將代碼添加到上述文章中。 – 2012-03-14 15:33:16

+0

布賴恩,我嘗試了你的建議。我將 '[self dismissModalViewControllerAnimated:YES];' 'didSelectAccount:'方法的開頭,但沒有運氣。 – 2012-03-14 16:42:51

+0

您已擁有-createDealObjectIfNeeded方法。這是設置自我的交易屬性嗎?如果不是,該代碼在哪裏? – 2012-03-14 16:47:05

相關問題