2017-06-15 52 views
1

我試圖將用戶信息傳輸到另一個segue,但是當我在表視圖中選擇用戶時,它顯示另一個用戶的信息,而不是它假設的那個。無法從表視圖中的索引路徑獲取正確的元素

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ShowUser" { 
      if let indexPath = followUsersTableView.indexPathForSelectedRow { 
       let user = usersArray[indexPath.row] 
       let controller = segue.destination as? OtherUserProfile 
       controller?.otherUser = user 
       controller?.loggedInUser = loggedInUser 

      } 
     } 
    } 
+0

你的表格視圖中有章節嗎?在這種情況下,你可能需要做這樣的事情:usersArray [(indexPath.section + 1)* indexPath.row]獲取正確的用戶 –

+0

這是我對章節,我也有一個過濾器功能。 –

+0

func numberOfSections(在tableView:UITableView中) - > Int { return 1 } –

回答

1

也許你應該發送你的用戶在didSelectRowAt委託方法。如果不執行,添加方法:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let user = usersArray[indexPath.row] 
    self.performSegue(withIdentifier: "ShowUser", sender: user) 

} 

然後在您的加賽格瑞準備:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "ShowUser" { 
     let controller = segue.destination as? OtherUserProfile 
     controller?.otherUser = sender as! YourUserClass 
     controller?.loggedInUser = loggedInUser 
    } 
} 

記住要改變「YourUserClass」與實際用戶的類別。也許如果使用Firebase,它就像FIRUser一樣。

希望它有幫助,不要猶豫,問。

+0

我知道現在發生了什麼,當我的表視圖過濾用戶,它不會重新加載上一行的數據,所以如果我在第2行有羅伯特,我再次過濾,拉拉到第2行。將顯示羅伯特的信息,如果我選擇行,我必須刷新行每次它過濾。我怎樣才能做到這一點? –

+0

@GabrielTavares在tableview實例上使用reloadSections或reloadData方法。 –

+0

我應該在我的過濾器實例上使用重新加載嗎?每次它改變文本字段的值,都應該重新加載? –

相關問題