1

我已经搜索了与此问题相关的各种链接,但无法解决此问题,这就是我发布此问题的原因。我有一个collectionView. 在一个特定的单元格中,我有许多视图,例如UserProfileViewProductViewCommentBoxView等。在CommentBoxView中有一个textView,用户可以在其中键入然后发表评论。发布评论后,我想滚动那个特定的单元格,用户从哪个单元格发布了评论。我知道我必须使用self.collectionView.scrollToItem(at:IndexPath(item: indexNumber, section: sectionNumber), at: .right, animated: false)

这是代码,

func customCell(_ cell: UICollectionViewCell, didPressButton: UIButton, indexPathRow: Int, commentPost: String, commentatorImage: UIImageView, commentatorName: UILabel, comments: UITextView) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: {
        self.collectionView.reloadData()
        self.postComment(commentatorImage: commentatorImage, commentatorName: commentatorName, comments: comments) })
}

但我的问题是:

  1. 我必须在哪里编写此代码?在视图中确实出现了?还是在评论帖子功能中成功是真的?
  2. 如何将 indexNumber 和 sectionNumber 传递给

    self.collectionView.scrollToItem(at:IndexPath(item: indexNumber, section:sectionNumber)

请任何人帮助我解决这个问题。谢谢

4

2 回答 2

3

您可以使用其中一种生命周期方法,甚至可以在重新加载数据调用之后使用。像这样的东西,

override func viewDidLayoutSubviews() 
{
    super.viewDidLayoutSubviews()
    let indexPath = IndexPath(item: 12, section: 0)
    self.collectionView.scrollToItem(at: indexPath, at: [.centeredVertically,   .centeredHorizontally], animated: true)
}

谢谢。

于 2018-07-16T06:43:45.970 回答
0

根据您显示的自定义委托方法:

func customCell(_ cell: UICollectionViewCell, didPressButton: UIButton, indexPathRow: Int, commentPost: String, commentatorImage: UIImageView, commentatorName: UILabel, comments: UITextView) { 
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: { 
        self.collectionView.reloadData() 
        self.postComment(commentatorImage: commentatorImage, commentatorName: commentatorName, comments: comments) 
    })

我相信你正在将cell你的单元类传递给控制器​​。因此,在您的自定义委托方法中,您可以像下面这样获取 indexPath:

let indexPath = yourCollectionView.indexPath(for: yourCollectionCell)

现在您可以滚动到这个 indexPath。希望这可以帮助。:)

于 2018-07-16T06:46:09.873 回答