Голос может видеть только страницу uicollectionview
Итак, у меня есть UICollectionView с набором UICollectionViewCells, отображаемым с использованием пользовательского UILayout.
Я настроил UILayout, чтобы выложить все UICollectionViewCells почти точно так же, как и то, как они выложены в приложении photos на ios.
Проблема заключается в том, что, когда включен голос, и пользователь проходит через UICollectionViewCells с помощью прокрутки, когда пользователь добирается до последней видимой ячейки на странице и пытается пронести вперед в следующую ячейку, он просто останавливается.
Я знаю, что в UITableView ячейки будут продолжать двигаться вперед, а представление таблицы будет автоматически прокручиваться.
Кто-нибудь знает, как получить такое поведение?
Ответы
Ответ 1
Этот ответ тоже работал у меня. Спасибо!
Есть еще один вызов, который вы должны включить, чтобы заставить его работать. В противном случае ваш метод (void) accessibilityElementDidBecomeFocused никогда не будет вызван. Вы должны включить доступ к объекту Cell.
-
Вариант 1: в ViewController установите для экземпляра ячейки доступность.
Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
[cell setIsAccessibilityElement:YES];
-
Вариант 2. Внедрите интерфейс доступности в объекте ячейки:
- (BOOL)isAccessibilityElement
{
return YES;
}
- (NSString *)accessibilityLabel {
return self.label.text;
}
- (UIAccessibilityTraits)accessibilityTraits {
return UIAccessibilityTraitStaticText; // Or some other trait that fits better
}
- (void)accessibilityElementDidBecomeFocused
{
UICollectionView *collectionView = (UICollectionView *)self.superview;
[collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
}
Ответ 2
После часов и часов головной боли решение было действительно простым. Если кто-то другой сталкивается с подобной проблемой, это то, что я сделал:
В подклассе UICollectionViewCell, который вы используете для вашего CollectionView, переопределите accessibilityElementDidBecomeFocused и реализуйте его следующим образом:
- (void)accessibilityElementDidBecomeFocused
{
UICollectionView *collectionView = (UICollectionView *)self.superview;
[collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}
Ответ 3
Ответ Стивена помог мне! Спасибо.
Я хочу добавить, что это, похоже, влияет только на iOS6; похоже, они исправили его в iOS7.
Кроме того, вы можете сделать прокрутку немного быстрее и чище, передав self вместо nil в UIAccessibilityPostNotification - например:
- (void)accessibilityElementDidBecomeFocused {
UICollectionView *collectionView = (UICollectionView *)self.superview;
[collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
}
Ответ 4
Это не сработало для меня, но я публикую здесь Swift версию Kgreenek и Stephen на случай, если кто-то захочет скопировать ее быстро, чтобы проверить, разрешает ли она свои проблемы.
override func accessibilityElementDidBecomeFocused() {
if let superview = self.superview as? UICollectionView, let indexPath = superview .indexPath(for: self) {
superview.scrollToItem(at: indexPath, at: [.centeredVertically, .centeredHorizontally], animated: false)
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self)
}
}