2017-07-11 55 views
0

詳述控制器I具有與顯示登錄的用戶和在應用中的任何其他用戶之間的姓名,圖像和最後一個消息單元的TableViewController。因爲附加單個單元格只顯示未登錄用戶的名稱。單元格既有登錄用戶的名稱,也有登錄用戶的名稱,所以爲了顯示未登錄的用戶名,我使用了這個代碼。SEGUE從表視圖

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "MessageCell", for: indexPath) as! MessageTableViewCell 

if message.ReceiverId != self.loggedInUserUid { 
      var newVariable = message.ReceiverId 

     if let imageName = newVariable { 

      let ref = FIRDatabase.database().reference().child("users").child(imageName) 

      ref.observeSingleEvent(of: .value, with: { (snapshot) 
       in 

       if let dictionary = snapshot.value as? [String: AnyObject]{ 
        for post in dictionary { 
         let messages = snapshot.value as! [String: AnyObject] 
         //let messages = post.value as! [String: AnyObject] 
         for (id, value) in messages { 

          self.username = messages["username"] as? String 

}}}})}}else if message.senderId != self.loggedInUserUid { 
et newVariable = message.senderId 

      if let imageName = newVariable { 

       let ref = FIRDatabase.database().reference().child("users").child(imageName) 

       ref.observeSingleEvent(of: .value, with: { (snapshot) 
        in 

        if let dictionary = snapshot.value as? [String: AnyObject]{ 
         for post in dictionary { 
          let messages = snapshot.value as! [String: AnyObject] 
         //  let messages = post.value as! [String: AnyObject] ---> very confused why it changed from post to snapshot, if I put post.value, it doesn't let me run 
          for (id, value) in messages { 


           self.username = messages["username"] as? String 

,並顯示未登錄用戶的名字,這是我想要的,但是當我Segue公司到了新的一頁,我也想通過這個名字,根據所選擇的小區。

override public func prepare(for segue: UIStoryboardSegue, sender: Any?) { 


     guard segue.identifier == "MessageNow", let chatVc = segue.destination as? SendMessageViewController else { 
      return 
     } 
chatVc.username = self.username 
}} 

但是當我點擊任何單元格時,它總是顯示我單擊的第一個單元格的名稱。

回答

1

這裏是你需要做的賽格瑞方法準備什麼,你可以從細胞的userName這被選中,將其設置爲chatVC

override public func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard segue.identifier == "MessageNow", let chatVc = segue.destination as? SendMessageViewController else { 
     return 
    } 
    let selectedIndexPath = tableView.indexPathForSelectedRow 
    let cell = tableView.cellForRow(at: selectedIndexPath) as! YourCustomCell 

    chatVc.username = cell.userNameLabelPropertyOfYourCell.text 
} 
+0

非常感謝!這工作完美 – juelizabeth

+0

不客氣,如果您只使用viewcontroller「用戶名」變量設置爲chatVC您可以刪除它。 – Vardan

0

您必須tableView(_:didSelectRowAt:)方法分配值self.username。那時的變化應該反映出來。

我假設你是當用戶選擇的tableView行的觸發賽格瑞,當用戶選擇的tableView行你不指定新的價值self.username,所以它持續顯示舊值。

+0

我做了同樣的事情在didSelectRowAt,但它仍然沒有工作 – juelizabeth

0

你可以使用的的UITableViewDelegate

「didSelectRowAt」試試這個archieve這樣的:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    guard let cell = tableView.cellForRow(at: indexPath) as? MessageTableViewCell else { 
     return 
    } 
    self.username = cell.username 
} 
+0

小區無物業用戶名 – juelizabeth

+0

我編輯了我的答案。你需要把它轉換成你使用的UITableViewCell。 (MessageTableViewCell)這個單元格有一個顯示你的用戶名的屬性。 – cb89

+0

我的意思是沒有變量的單元格中稱爲用戶名 – juelizabeth