Надградих своя 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
с моите събития при докосване?
Благодаря, Дан