Пару дней назад я обновил свой 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");
}
когда я отпускаю изображение, которое я перетаскиваю по экрану, я получаю "touches ended event in ImageToDrag"
, но не журнал из контроллера представления.
Однако, если я намеренно пропущу представление, сделав это в представлении подкласса:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"touches ended event in ImageToDrag");
[[self.nextResponder nextResponder] touchesEnded:touches withEvent:event];
}
то я получаю обе записи журнала.
Единственное объяснение, которое я могу придумать, это то, что по какой-то причине UIView
потребляет событие touchesEnded
и не передает его контроллеру представления.
Я проверил, что exclusiveTouch
установлено на NO
, а userInteractionEnabled
установлено на YES
в родительском представлении и подклассе UIImageView
.
Я также протестировал компиляцию для iOS 5.0 и iOS 4.2 и развертывание тестового приложения как на iPad с iOS 5, так и на iPad с iOS 4.3.1.
Единственный способ, которым я смог получить событие касания для viewController
, - это пропустить представление и использовать двойное nextResponder
в подклассе. Хотя этот метод работает, он кажется мне взломом, и я уверен, что он аукнется позже.
Кто-нибудь еще видел такое поведение? Есть ли способ узнать, что UIView
делает с моими сенсорными событиями?
Спасибо, Дэн