Подтвердить что ты не робот

Как выбрать некоторые элементы в UICollectionView после первой загрузки?

Я попытался написать

[self collectionView:myCollectionView didSelectItemAtIndexPath:selectedIndexPath]

и выбран UICollectionViewCell = YES в viewDidLoad, и он реализовал метод didSelectItemAtIndexPath, но ячейка не выбрана.

Я написал выбранное состояние в подклассе UICollectionViewCell (void)setSelected:(BOOL)selected. После загрузки представления функция ручного выбора работает. Но я не мог авторизовать некоторые элементы после первой загрузки вида.

И я попытался написать коды в:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

и

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath, все не в порядке.

Я нашел первый запуск viewDidLoad и didSelectItemAtIndexPath, затем cellForItemAtIndexPath, похоже, что я не мог получить ячейку в indexPath (что я знаю) до cellForItemAtIndexPath, потому что до этого ячейка не существует. Итак, как выбрать некоторые элементы в UICollectionView после первой загрузки?

Извините за мой бедный английский. Спасибо заранее.

4b9b3361

Ответ 1

Не уверен, если ваш вопрос правильный, но вот возможное решение:

В частности. viewWillAppear: do

[self.collectionView reloadData];
NSIndexPath *selection = [NSIndexPath indexPathForItem:THE_ITEM_TO_SELECT 
                                             inSection:THE_SECTION];
[self.collectionView selectItemAtIndexPath:selection 
                                  animated:YES 
                            scrollPosition:UICollectionViewScrollPositionNone];

Помните, что вызов 'selectItemAtIndexPath' программным образом НЕ вызывает связанные методы делегата; вам придется называть их кодом, если они вам понадобятся.

Ответ 2

В моем случае selectItemAtIndexPath не имел эффекта после reloadData, поэтому мне пришлось вызвать его в блоке завершения performBatchUpdates:

collectionView.dataSource = ...
collectionView.delegate = ...

let indexPath = ...

collectionView.performBatchUpdates(nil) { _ in
  collectionView.selectItemAtIndexPath(indexPath, animated: false, scrollPosition: .None)
}

Ответ 3

Swift 3

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

 override func viewDidAppear(_ animated: Bool) {
        // Auto Select First Item
        self.myCollectionView.performBatchUpdates(nil) { _ in
            self.myCollectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: false, scrollPosition: [.centeredHorizontally])
            self.collectionView(self.myCollectionView, didSelectItemAt : IndexPath(item: 0, section: 0))
        }
    }