Reputation: 2822
I have a UIScrollView
used inside a custom class that subclasses UIView
. Within that scrollview, I have added several other custom objects (all subclassing UIView
as well) like so:
UITapGestureRecognizer *tap;
for (int count = 0; count < ColorSchemeCount; count++) {
//Check for next page first
[self managePageAdditions];
//Set up the scheme
ColorScheme *scheme = [[ColorScheme alloc]
initWithFrame:[self determineSchemeCircleFrameFromCount:pageCheck]
title:[self getColorSchemeTitleFromIndex:pageCheck]
colors:[self getColorSchemeFromIndex:pageCheck]];
scheme.tag = pageCheck;
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(schemeTouchedAtIndex:)];
tap.cancelsTouchesInView = NO;
[scheme addGestureRecognizer:tap];
[self.scrollView addSubview:scheme];
//See if next pass requires a new page or not
if(pageCheck > 0) needsNextPage = (pageCheck % kSchemesPerPage == 0);
needsNextPage ? pageCheck = 0 : pageCheck++;
}
And then I try to see the ColorScheme
's tag to respond accordingly:
- (void)schemeTouchedAtIndex:(UITapGestureRecognizer *)gesture{
CGPoint touchPointInSuperview = [gesture locationInView:self.scrollView];
ColorScheme *touchedView = (ColorScheme *)[self.scrollView hitTest:touchPointInSuperview withEvent:nil];
NSLog(@"%li", (long)touchedView.tag);
}
And no matter what I seem to do, it always logs the tag as zero.
A couple of observations:
ColorScheme
are being added just fine.tap.cancelsTouchesInView = NO
so the UIScrollView
won't swallow all the touches.locationInView
I have tried using self
instead of self.scrollView
to no luck. Again, the code where this resides is in a class subclassing UIView
.Stumped on this one, any help is much appreciated.
Upvotes: 6
Views: 8628
Reputation: 10294
-(void)schemeTouchedAtIndex:(UITapGestureRecognizer *)gesture{
NSLog(@"%ld", gesture.view.tag);
}
Since your gestures are hooked to the ColorScheme object its less hacky to grab the view from the gesture recognizer itself.
Upvotes: 26