ios - UITapGestureRecognizer on UILabels in subview of UIScrollView not working -
i have problem uitapgesturerecognizer on uilabels in content view in uiscrollview not calling it's methods.
the view hierarchy follows:
- scrollview (uiscrollview)
- contentview (uiview)
- testlabel (uilabel) - here uitapgesturerecognizer attached
- contentview (uiview)
i have distilled code down example highlight problem
// set scrollview size - added in storyboad [scrollview setcontentsize:cgsizemake([arrayofverbs count]*self.view.frame.size.width, scrollview.contentsize.height)]; [scrollview setcancancelcontenttouches:yes]; // tried both yes , no [scrollview setpagingenabled:yes]; // add content view uiview *contentview = [[uiview alloc] initwithframe:cgrectmake(0, 0, scrollview.contentsize.width, scrollview.contentsize.height)]; [scrollview addsubview:contentview]; // add test uilabel uilabel *testlabel = [[uilabel alloc] initwithframe:cgrectmake(0, 0, 200, 100)]; [testlabel setbackgroundcolor:[uicolor redcolor]]; [testlabel settext:@"test touch"]; [testlabel setuserinteractionenabled:yes]; [contentview addsubview:testlabel]; // add gesture recogniser uitapgesturerecognizer *singletap = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(playsound:)]; singletap.numberoftapsrequired = 1; [testlabel addgesturerecognizer:singletap];
and method tap gesture recogniser should call
- (void)playsound:(uitapgesturerecognizer *)sender { nslog(@"play sound"); if(sender.state == uigesturerecognizerstateended) { int pronounnumber = [sender.view tag]; int examplenumber = (int)sender.view.frame.origin.x%(int)self.view.frame.size.width; nslog(@"pronoun %i , example %i", pronounnumber, examplenumber); } }
this method never called when tried touch on uilabel.
i have tried setting property cancancelcontenttouches both yes , no on scroll view suggested thread, it's still not working.
the strange thing is, if add uilabel outside of scrollview, gesture recogniser works! problem occurs in contentview subview of scrollview.
i using auto-layout, if might difference?
thanks!
the scroll view has gesture recogniser. default, 1 gesture recognizer can handling touches @ 1 time. need make delegate of gesture , implement gesturerecognizer:shouldrecognizesimultaneouslywithgesturerecognizer:
return yes
. allow work @ same time scroll view.
Comments
Post a Comment