从UITapGestureRecognizer获取对象的标记

Jas*_*ldo 5 objective-c uiscrollview ios

UIScrollView在自定义类中使用了子类UIView.在该scrollview中,我添加了其他几个自定义对象(所有子类UIView也是如此),如下所示:

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++;
    }
Run Code Online (Sandbox Code Playgroud)

然后我试着看到ColorScheme标签做出相应的反应:

- (void)schemeTouchedAtIndex:(UITapGestureRecognizer *)gesture{
    CGPoint touchPointInSuperview = [gesture locationInView:self.scrollView];
    ColorScheme *touchedView = (ColorScheme *)[self.scrollView hitTest:touchPointInSuperview withEvent:nil];

    NSLog(@"%li", (long)touchedView.tag);
}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,它总是将标签记录为零.

几点意见:

  • 我可以确认标签设置正确,并且所有的标签都ColorScheme添加得很好.
  • 我也有,tap.cancelsTouchesInView = NO所以UIScrollView不会吞下所有的接触.
  • locationInView我尝试使用self而不是self.scrollView没有运气.同样,它所在的代码在类子类中UIView.

难以理解这一点,我们非常感谢任何帮助.

Dav*_*ong 23

-(void)schemeTouchedAtIndex:(UITapGestureRecognizer *)gesture{
NSLog(@"%ld", gesture.view.tag);
}
Run Code Online (Sandbox Code Playgroud)

由于您的手势被挂钩到ColorScheme对象,因此从手势识别器本身抓取视图就不那么容易了.