Как перенести пользователя в выбранный индекс после нажатия - PullRequest
0 голосов
/ 08 января 2020

Как я могу вывести sh пользователя на фотографию, которую он выбрал (выбранный индекс), и вывести sh пользователя на эту фотографию, но все же позволить им прокручивать вверх или вниз к предыдущей или следующей фотографии этого выбранного индекса ?

Проблема, с которой я сталкиваюсь, заключается в том, что когда viewController выдвигается, он переводит меня к первому индексу вместо выбранного.

При нажатии на фотографию, я хотел бы, чтобы она выбрала sh для выбранной фотографии

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let singlePostVC = (storyboard!.instantiateViewController(withIdentifier: "SinglePostVC") as? SinglePostVC)!

    singlePostVC.posts = posts
    singlePostVC.selectedIndex = indexPath.row

    navigationController?.pushViewController(singlePostVC, animated: true)
    self.navigationController?.navigationBar.backIndicatorImage = #imageLiteral(resourceName: "BackButton")
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: UIBarButtonItem.Style.plain, target: nil, action: nil)
    self.navigationItem.backBarButtonItem?.tintColor = UIColor(named: "darkModeLabels")

}

Вот код для SinglePostVC

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int.   {

    return posts.count


}



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

    cell.delegate = self
    cell.post = posts[indexPath.row]

    handleUsernameLabelTapped(forCell: cell)
    handleMentionTapped(forCell: cell)
    handleHashTagTapped(forCell: cell)

    return cell
}



func numberOfSections(in collectionView: UICollectionView) -> Int {
    return 1
}



override func viewDidLoad() {
    super.viewDidLoad()


    let indexPath = IndexPath(item: selectedIndex, section: 0)
    postsCollectionView.scrollToItem(at: indexPath, at:.bottom , animated: true)

}

1 Ответ

1 голос
/ 08 января 2020

Вы должны поместить свою строку:

let indexPath = IndexPath(item: selectedIndex, section: 0)
postsCollectionView.scrollToItem(at: indexPath, at:.bottom , animated: true)

в метод viewDidAppear вместо viewDidLoad примерно так:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)


    let indexPath = IndexPath(item: selectedIndex, section: 0)
    postsCollectionView.scrollToItem(at: indexPath, at:.bottom , animated: true)

}

Что происходит, вы говорите это прокрутить к этому определенному indexPath объекта CollectionView, но на самом деле CollectionView не появился, поэтому, как только он это делает, он в основном перезаписывает команду, которую вы сказали ему выполнить, и просто отображает ее как обычно. Когда вы используете viewDidAppear, он ждет, пока пользователь не покажет вид, ПОТОМ отображает свиток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...