Я обновил свой iPad до 5.0 пару дней назад и одновременно обновил Xcode до 4.2, чтобы я мог продолжить тестирование своих приложений. Теперь у меня проблемы с сенсорным кодом в нескольких приложениях, которые работали с предыдущими версиями Xcode.
Я создал подкласс UIImageView, чтобы добавить некоторые функции перетаскивания, переопределив - (void) TouchesBegan
и - (void) TouchesMoved
. Я сделал не переопределить - (void) TouchesEnded
в подклассе, но обработал это в контроллере представления для представления, которое содержит представление изображения.
Я включил подкласс UIImageView
в новый проект для тестирования и сузил проблему до того факта, что родительский UIView
(шаблон, созданный Xcode) похоже, не пересылает события касания контроллеру представления (также созданному Xcode).
Если я добавлю это к своему подклассу:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[self.nextResponder touchesEnded:touches withEvent:event];
}
и это к контроллеру представления моего родительского представления:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ViewController");
}
когда я отпускаю изображение, которое перетаскиваю по экрану, я получаю событие "касание завершено. в ImageToDrag "
, но не в журнале контроллера представления.
Однако, если я намеренно пропускаю представление, делая это в подклассе представления:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[[self.nextResponder nextResponder] touchesEnded:touches withEvent:event];
}
, я получаю обе записи журнала.
Единственное объяснение, которое я могу придумать, заключается в том, что по какой-то причине UIView
использует событие touchesEnded
, а не передает его контроллеру представления.
Я проверил, что для параметра exclusiveTouch
установлено значение НЕТ
, а для параметра userInteractionEnabled
установлено значение ДА
в родительском представлении и подклассах. UIImageView
.
Я также тестировал компиляцию для iOS 5.0 и iOS 4.2 и развертывание тестового приложения на iPad с iOS 5 и iPad с iOS 4.3.1.
Единственный способ передать событие касания viewController
- это пропустить представление и использовать двойной nextResponder
в подклассе. Хотя этот метод работает, мне он кажется хакерским, и я уверен, что он вернется, чтобы укусить меня позже.
Кто-нибудь еще видел такое поведение? Есть ли способ узнать, что UIView
делает с моими событиями касания?
Спасибо, Дэн