Как получить indexPathForVisableSections из collectionView с помощью кнопки? - PullRequest
1 голос
/ 07 мая 2020

У меня есть collectionView, который является шириной экрана, и мне нужно, чтобы он переключился на следующий раздел вместо того, чтобы получить тот, который находится вне поля зрения справа. Мне довелось получить его там, где он работает 1 раз с этим кодом, а затем он перестает работать, хотя программа работает нормально без ошибок.

@objc func RightButtonClick(button1: UIButton) {
        let indexOfCell = button1.tag
        let visibleItems: NSArray = self.CollectionView2.indexPathsForVisibleItems as NSArray
        let currentItem: IndexPath = visibleItems.object(at: 0) as! IndexPath
        let nextItem: IndexPath = IndexPath(item: currentItem.item + indexOfCell, section: 0)
        if nextItem.row == CollectionView2.numberOfSections {
            self.CollectionView2.scrollToItem(at: nextItem, at: .left, animated: true)
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2020

Ваш nextItem установлен в раздел 0, поэтому вы никогда не перейдете к следующему разделу. Попробуйте следующее:

@objc func RightButtonClick() {
    let visibleItems: NSArray = self.collectionView.indexPathsForVisibleItems as NSArray
    guard let currentItem: IndexPath = visibleItems.object(at: 0) as? IndexPath else { return }
    print(currentItem.section)
    print(collectionView.numberOfSections)
    if collectionView.numberOfSections > currentItem.section + 1 {
        let nextSection: IndexPath = IndexPath(item: 0, section: currentItem.section + 1)
        self.collectionView.scrollToItem(at: nextSection, at: .left, animated: true)
    }
}

Примечание: вам не нужен тег кнопки, чтобы делать что-то подобное, поэтому он будет удален.

Если у вас есть только 1 раздел, и вы пытаетесь go перейти к следующему элементу в разделе, попробуйте следующее:

@objc func RightButtonClick() {
    let visibleItems: NSArray = self.collectionView.indexPathsForVisibleItems as NSArray
    guard let currentItem: IndexPath = visibleItems.object(at: 0) as? IndexPath else { return }
    print(currentItem.section)
    print(collectionView.numberOfSections)
    if collectionView.numberOfItems(inSection: 0) > currentItem.row + 1 {
        let nextItem: IndexPath = IndexPath(item: currentItem.row + 1, section: 0)
        self.collectionView.scrollToItem(at: nextItem, at: .centeredHorizontally, animated: true)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...