Мой UIScrollView (содержащий некоторые UIControls) больше не прокручивается в iOS 8
В моем приложении я сделал календарь, который в основном состоит из UIScrollView, содержащего несколько ячеек (пользовательский UIControl) для каждого дня, верхний заголовок, содержащий некоторые метки (Mon, Tue, Wed...) и, очевидно, некоторые разделители (UIView 1px толщина).
На iOS 7 все работало нормально, я смог выделить ячейки, нажав их (я использую событие UIControlEventTouchUpInside, чтобы выделить их), и перетащить просмотр с прокруткой для отображения предыдущего или следующего месяца.
Но так как я перешел на iOS 8 и скачал Xcode 6, он больше не работает. На самом деле я все еще могу выбрать ячейки, но представление прокрутки не прокручивается (за исключением случаев, когда я перетаскиваю его из заголовка или разделителя, которые являются базовым UIView без какого-либо управления событиями касания).
Или я начинаю перетаскивать вид прокрутки из ячейки, он просто остается фиксированным.
Я ничего не изменил, поэтому я не понимаю, почему это больше не работает...
Пожалуйста, помогите мне!!:)
большое спасибо
PS: я француз, извините за мой плохой английский
1 ответ
РЕДАКТИРОВАТЬ: с iOS 8.1 поведение кажется похожим на поведение до iOS 8.0, поэтому Apple, возможно, "исправила" его. Так что ответ ниже не нужен больше.
Насколько я вижу, в iOS 8 произошли изменения, которые влияют на обработку UIScrollview. UIScrollView больше не отслеживает касания содержимого в случае UIControl.
Одна вещь, которую я сделал, это создать подкласс UIScrollView и перезаписать touchesShouldCancelInContentView
- (BOOL) touchesShouldCancelInContentView:(UIView *)view {
return YES;
}
Смотрите также https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/index.html
Возвращаемое значение: ДА, чтобы отменить дальнейшие сенсорные сообщения для просмотра, НЕТ, чтобы просмотр продолжал получать эти сообщения. Возвращаемое значение по умолчанию - YES, если view не является объектом UIControl; в противном случае возвращается NO.