Кнопка внутри CollectionView, повторяющая информацию о первой ячейке - PullRequest
0 голосов
/ 29 мая 2020
• 1000 каждый пост / ячейку, но когда я нажимаю на него, он показывает комментарии к самому первому посту представления коллекции. это мой код для отображения комментариев и для кнопки, которую можно нажимать.
 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! homeViewCell

    let url = dataArray[indexPath.row]["thumbnail_images"]["medium"]["url"].stringValue
    cell.imageArticle.sd_setImage(with: NSURL(string: url) as URL?, placeholderImage:UIImage(named: "empty.png"))
     cell.nametag.text = String(htmlEncodedString:dataArray[indexPath.row]["tags"][0]["title"].stringValue)
    cell.nametagg.text =  String(htmlEncodedString:dataArray[indexPath.row]["categories"][0]["title"].stringValue)



    cell.fbButton.addTarget(self, action: #selector(homeController.fbClick), for: .touchUpInside)

    cell.commentButton.addTarget(self, action: #selector(homeController.comment), for: .touchUpInside)
    cell.commentButton.setTitle("\(dataArray[indexPath.row]["comment_count"].stringValue) comments", for: .normal)
    cell.leaveComment.addTarget(self, action: #selector(homeController.leavecomment), for: .touchUpInside)




   cell.contentline.text = String(htmlEncodedString:dataArray[indexPath.row]["excerpt"].stringValue)





 return cell
}

, а это код для нажатия кнопки

@objc func comment(_ sender: Any) {

  let vc = CommentViewController()
    vc.dataArray = dataArray[indexPath.row]["comments"].array
    self.navigationController!.pushViewController(vc, animated: true)


}

Надеюсь, вы понимаете мой вопрос, спасибо

1 Ответ

1 голос
/ 29 мая 2020

Вы объявили indexPath как глобальную переменную, и ее значение равно NSIndexPath(row: 0, section: 0), как вы сказали.

в comments(_:) функции, которую вы использовали indexPath.row, но это row 0 так это первый комментарий к посту.

Вам не нужно устанавливать tapgesture для кнопки cell.


В homeViewCell вы должны создать IBAction для кнопки и закрытия вызова, когда он сработал ->

class homeViewCell: UICollectionViewCell {

    public var didTapComment: (() -> Void)?

    @IBAction func didTapCommentButton(_ sender: UIButton) {
        didTapComment?()
    }
}

Установить действие didTapComment в cellForItemAt вот так ->

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! homeViewCell

    cell.didTapComment = { [weak self] in
        let vc = CommentViewController()
        vc.dataArray = dataArray[indexPath.row]["comments"].array
        self?.navigationController!.pushViewController(vc, animated: true)
    }

    let url = dataArray[indexPath.row]["thumbnail_images"]["medium"]["url"].stringValue

    cell.imageArticle.sd_setImage(with: NSURL(string: url) as URL?, placeholderImage:UIImage(named: "empty.png"))
    cell.nametag.text = String(htmlEncodedString:dataArray[indexPath.row]["tags"][0]["title"].stringValue)
    cell.nametagg.text =  String(htmlEncodedString:dataArray[indexPath.row]["categories"][0]["title"].stringValue)

    cell.fbButton.addTarget(self, action: #selector(homeController.fbClick), for: .touchUpInside)

    cell.commentButton.setTitle("\(dataArray[indexPath.row]["comment_count"].stringValue) comments", for: .normal)
    cell.leaveComment.addTarget(self, action: #selector(homeController.leavecomment), for: .touchUpInside)

    cell.contentline.text = String(htmlEncodedString:dataArray[indexPath.row]["excerpt"].stringValue)

    return cell
 }
}

Удалить подписки;

  • cell.commentButton.addTarget(self, action: #selector(homeController.comment), for: .touchUpInside) строка из cellForItemAt

  • @objc func comment(_ sender: Any) функция

  • let indexPath = NSIndexPath(row: 0, section: 0)

...