Изменение содержимого ячейки в tableview после нажатия в Swift

#swift #uitableview #tableview #custom-cell

#swift #uitableview #просмотр таблицы #пользовательская ячейка

Вопрос:

У меня есть приложение для чата с 2 пользовательскими ячейками, ячейкой отправителя и получателя. После заполнения ячеек можно щелкнуть только те, в которых есть текст «показать изображение». Я пытаюсь щелкнуть по этим ячейкам, чтобы

  1. я могу скрыть метку
  2. Я могу показать изображение по URL-адресу

Функция tap работает, но я не могу выполнить вышеуказанные шаги. Пожалуйста, помогите, потому что я не знаю, как это сделать

Вот мой код

     @objc
func tapFunctionCell(sender:UITapGestureRecognizer) {
    print("tap again sen")

    let tapLocation = sender.location(in: tblViewChat)
    let indexPath = self.tblViewChat.indexPathForRow(at: tapLocation)
    let position = indexPath?.row ?? 0
    print(position)
    
    let cell = tblViewChat.dequeueReusableCell(withIdentifier: "senderCell") as! SenderTblCell
    
        cell.lblMessage.isHidden = true
       
        let url = URL(string:objChatVM.getMessage(index:position))
        print(url)
        cell.ImageB.kf.setImage(with:url)
        cell.ImageB.isHidden = false

}
@objc
    func tapFunction(sender:UITapGestureRecognizer) {
        print("tap again receive")
        let cell2 = tblViewChat.dequeueReusableCell(withIdentifier: "receiverCell") as! ReceiverTblCell
        
         cell2.lblMessage.isHidden = false
        let tapLocation = sender.location(in: tblViewChat)
        let indexPath = self.tblViewChat.indexPathForRow(at: tapLocation)
        let position = indexPath?.row ?? 0
        print(position)
          
                 let url = URL(string:objChatVM.getMessage(index:position))
            print(url)
                 cell2.imageButton.kf.setImage(with:url)
                 cell2.imageButton.isHidden = false
        
       
    }
 

Ответ №1:

Проблемы в коде функции tap. Если вы хотите получить ячейку из пути индекса, используйте метод cellForRow табличного представления. итак, вместо этого

 let cell = tblViewChat.dequeueReusableCell(withIdentifier: "senderCell") as! SenderTblCell
 

используйте это для обоих действий с касанием.

 let cell = tblViewChat.cellForRow(at: indexPath) as! SenderTblCell
 

Комментарии:

1. пусть cell = self.tblViewChat.cellForRow(at: indexPath!) как ! SenderTblCell благодарит Раджу Кишана