2017-07-09 1 views
0

J'ai 2 cellules prototypes.Laisser la cellule apparaître et disparaître en fonction de TextInput

On représente tous les commentaires de la publication. Ceci est initialement présenté.

Si un utilisateur écrit un signe "@", une tableview avec les utilisateurs qu'il peut choisir de lier apparaît.

Mon problème est que les cellules avec les utilisateurs ne disparaissent jamais. Je veux qu'ils disparaissent si une cellule est touchée ou si l'utilisateur supprime le signe @.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if (commentTextField.text?.contains("@"))! { 
     let cellForUser = tableView.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! SuggestUserTableViewCell 

     let user = usersSuggestion[indexPath.row] 

     cellForUser.userSuggested = user 
     return cellForUser 
    } else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "CommentCell", for: indexPath) as! CommentTableViewCell 
     let comment = comments[indexPath.row] 
     let user = users[indexPath.row] 

     cell.tapMore.tag = indexPath.row 
     cell.comment = comment 
     cell.postId = postId 
     cell.user = user 
     cell.delegate = self 
     return cell 

    } 


} 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    let caption = commentTextField.text 
    let words = caption?.components(separatedBy: CharacterSet.whitespacesAndNewlines) 

    for var word in words! { 
     if word.hasPrefix("@") { 
      word = word.trimmingCharacters(in: CharacterSet.punctuationCharacters) 
      return usersSuggestion.count 

     } 
    } 
    return comments.count 

} 

De plus, je voudrais avoir le cell2 avec les utilisateurs en bas, actuellement les deux commencent au sommet de l'écran.

Et je ne veux pas laisser les commentaires disparaître, juste diminuer l'opacité de la cellule. Cell2 devrait disparaître dès que la cellule a été touchée ou que le signe @ a été supprimé.

Merci à l'avance

Mise à jour le code

@objc func textFieldDidChange() { 

    doSearch() 

    if let commentText = commentTextField.text , !commentText.isEmpty { 
     sendButton.setTitleColor(UIColor.blue, for: UIControlState.normal) 

     sendButton.isEnabled = true 
     return 
    } 

    sendButton.setTitleColor(UIColor.lightGray, for: UIControlState.normal) 
    sendButton.isEnabled = false 
} 

func doSearch() { 
    let caption = commentTextField.text 

    let words = caption?.components(separatedBy: CharacterSet.whitespacesAndNewlines) 
    for var word in words! { 
     if word.hasPrefix("@") { 
      word = word.trimmingCharacters(in: CharacterSet.punctuationCharacters) 

      self.usersSuggestion.removeAll() 
      API.User.suggestUsers(withText: word, completion: { (user) in 

       self.usersSuggestion.insert(user, at: 0) 
       self.tableView.reloadData() 
      }) 
      self.usersSuggestion.removeAll() 
     }else { 
      self.usersSuggestion.removeAll() 
     } 
    } 
} 

Répondre

0

Au lieu d'avoir le contrôle de « @ » dans CellForRowAt, je pense que vous devriez ajouter une cible à votre champ de texte avec l'action .editingChanged de sorte que le chèque se déclenche chaque fois qu'il y a un changement. J'espère que ça aide.

+0

J'ai, le reste fonctionne bien, je vais le montrer dans mon code –