В представлении коллекции мне бы хотелось узнать первый элемент, который отображается в виде коллекции. Я решил, что посмотрю на visibleCells и станет первым в списке, но это не так.Есть ли способ определить порядок self.collectionview.visiblecells?
ответ
Возвратившись первый элемент виден на CollectionView:
UICollectionViewCell *cell = [self.collectionView.visibleCells firstObject];
возвращает первый элемент из всех элементов в CollectionView
UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];
Вы не хотите клетку, просто данные:
NSIndexPath *indexPath = [[self.collectionView indexPathsForVisibleItems] firstObject];
id yourData = self.dataSource[indexPath.row];
Но массив visivleCells не заказывается !!
Ну, тогда вам нужно заказать:
NSArray *indexPaths = [self.collectionView indexPathsForVisibleItems];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"row" ascending:YES];
NSArray *orderedIndexPaths = [indexPaths sortedArrayUsingDescriptors:@[sort]];
// orderedIndexPaths[0] would return the position of the first cell.
// you can get a cell with it or the data from your dataSource by accessing .row
Edit: я верю в visibleCells (и тому подобное) возвращение заказал уже, но я не нашел ничего об этом на Docs. поэтому я добавил часть заказа, чтобы убедиться.
Я просто попробовал это, но кажется, что у массива будет первый элемент в виде некоторого буфера. второй элемент - первый, который отображается. – Frank
Это странно. попробуйте сделать это снова, но не прокрутите вниз по таблице/просто покажите первый элемент видимым, получите первый видимый элемент, а затем получите первую ячейку вручную (с помощью NSIndexPath), проверьте, совпадают ли они. Технически, этот код должен работать, я предлагаю вам отправить код :) – Erakk
Я видел, что массив 'visibleCells' неупорядочен, поэтому это хорошая идея. – erikprice
В двухмерном пространстве нет ни одного возможного порядка. Если у self.collectionView.visibleCells
нет вашего заказа, сортируйте ячейки так, как вы хотите, сравнивая их фреймы или их указательные пути.
Swift3
Основываясь на предыдущем ответе, здесь эквивалент Swift3, чтобы получить упорядоченный видимые ячейки, первый заказ видимый indexpath, то выборка UICollectionViewCell с использованием sorted
и flatMap
.
let visibleCells = self.collectionView.indexPathsForVisibleItems
.sorted { left, right -> Bool in
return left.section < right.section || left.row < right.row
}.flatMap { indexPath -> UICollectionViewCell? in
return self.collectionView.cellForItem(at: indexPath)
}
В еще более упрощенный вариант, немного менее читабельным
let visibleCells = self.collectionView.indexPathsForVisibleItems
.sorted { $0.section < $1.section || $0.row < $1.row }
.flatMap { self.collectionView.cellForItem(at: $0) }
Вот мой взгляд на него, добавить в качестве категории на UICollectionViewCell
.
@implementation UICollectionView (LTSortedCells)
-(NSArray<UICollectionViewCell*>*)LT_visibleCellsSortedByIndexPath
{
NSMutableDictionary<NSIndexPath*,UICollectionViewCell*>* dict = [NSMutableDictionary dictionary];
NSArray<NSIndexPath*>* indexPaths = self.indexPathsForVisibleItems;
NSArray<UICollectionViewCell*>* cells = self.visibleCells;
[indexPaths enumerateObjectsUsingBlock:^(NSIndexPath * _Nonnull indexPath, NSUInteger idx, BOOL * _Nonnull stop) {
UICollectionViewCell* cellForIndexPath = [cells objectAtIndex:idx];
[dict setObject:cellForIndexPath forKey:indexPath];
}];
NSArray<NSIndexPath*>* sortedIndexPaths = [indexPaths sortedArrayUsingComparator:^NSComparisonResult(NSIndexPath* _Nonnull ip1, NSIndexPath* _Nonnull ip2) {
return [ip1 compare:ip2];
}];
NSMutableArray<UICollectionViewCell*>* sortedCells = [NSMutableArray array];
[sortedIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath * _Nonnull indexPath, NSUInteger idx, BOOL * _Nonnull stop) {
UICollectionViewCell* cellForIndexPath = [dict objectForKey:indexPath];
[sortedCells addObject:cellForIndexPath];
}];
return [NSArray arrayWithArray:sortedCells];
}
@end
- 1. Есть ли способ определить правильный порядок кнопок Okay/Cancel?
- 2. Есть ли способ определить порядок ярлыков в LabelEncoder scikit-learn?
- 3. Есть ли способ определить порядок загрузки модулей apache
- 4. Есть ли способ определить порядок выполнения моих триггеров в sqlite?
- 5. Есть ли способ контролировать порядок расширения макросов
- 6. Есть ли способ установить порядок сериализации Xstream
- 7. Есть ли способ сохранить порядок столбцов?
- 8. Есть ли способ определить, отключена ли анимация
- 9. Есть ли способ определить, заблокирован ли объект?
- 10. Есть ли способ определить, произошло ли исключение?
- 11. Есть ли способ определить, переопределена ли функция?
- 12. Swing: Есть ли способ определить, есть ли мышь?
- 13. Есть ли способ изменить порядок/способ Acrobat выбирает текст PDF?
- 14. Есть ли способ определить двусмысленность в грамматике?
- 15. Есть ли способ определить поведение арифметики структуры?
- 16. Есть ли способ определить приоритетность зависимостей фрагментов?
- 17. Есть ли способ определить неиспользуемые привязки данных
- 18. xlsxwriter: есть ли способ определить «named cell»?
- 19. Есть ли способ определить, какая камера подключена?
- 20. Есть ли способ определить чистые функции?
- 21. Есть ли способ определить, что соединение управляется?
- 22. Есть ли способ определить перечисление в python?
- 23. Есть ли способ определить, когда UIPickerView перезагрузился?
- 24. Есть ли способ определить приоритет сервлет-фильтра?
- 25. Есть ли лучший способ определить этот генератор?
- 26. Есть ли способ определить, когда звонит телефон?
- 27. Есть ли способ определить физический размер монитора?
- 28. Есть ли способ определить цвет фона терминала?
- 29. Есть ли способ определить продолжительность аудиофайла
- 30. Есть ли способ определить макет по умолчанию?
Вы хотите увидеть первый элемент в представлении коллекции или хотите увидеть первый элемент в видимых ячейках в виде коллекции? –
Определите «первый». – Tommy
Вы можете использовать метод "- (NSArray *) indexPathsForVisibleItems" для просмотра первого элемента, если в виде коллекции есть видимые ячейки. –