2017-09-28 22 views
0

viewController1didSelectRow需要用戶viewController2。在那裏選擇一個值後,該值將被帶回,並應顯示在viewController1中。數據傳遞正常。我添加了一個邏輯來檢查數據是否在cellForRow內收到viewController1。仍然顯示舊數據。如何僅刷新該單元的數據而不是通過tableView.reloadData()如何刷新UITableViewCell中的數據?

即indexPath.row需要雙端隊列不同類型的細胞,如果已成功地從viewController2

回答

2

接收的數據使用reloadRows(在:[IndexPath],其中:UITableViewRowAnimation)有用於需要行指定索引路徑要被更新。

+0

謝謝。如何爲特定行提供價值?它還需要對不同類型的單元進行排序。 –

+0

您應該有某種模型,從哪裏配置行。更新行將調用「cellForRow」,並且應該有所有邏輯來設置模型的值或獲取不同的單元格。所以不要忘記用新的值保存模型。 – kirander

+0

謝謝。我也在這個問題中更新了這個信息:當回到'viewController1'時,如何使不同類型的單元出現? –

0

你可以做

reloadRows(at: [IndexPath], with: UITableViewRowAnimation) 

重新加載行,然後在你的cellForRowAt,你可以使用一個標誌,以查看用戶是否選擇了單元格或數據是否已經改變。

var userHasSelected[IndexPath:Bool] = [:] // populate this with your cell data 
if userHasSelected[indexpath] { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "userSelected", for: indexPath) 
else { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "userNotSelected", for: indexPath) 
} 

這就是我會做的。

1

我遇到過類似的情況,我的解決方案是添加一個屬性來記錄用戶點擊的索引路徑。 並刷新此視圖中的索引路徑將出現

var leaveAtIndexPath: IndexPath? 
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    leaveAtIndexPath = indexPath 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    if leaveAtIndexPath != nil { 
     tableView.reloadRows(at: [leaveAtIndexPath], with: .none) 
     leaveAtIndexPath = nil 
    } 
}