从 UITapGestureRecognizer 获取对象的标签

Posted

技术标签:

【中文标题】从 UITapGestureRecognizer 获取对象的标签【英文标题】:Getting tag of object from UITapGestureRecognizer 【发布时间】:2014-01-01 06:00:08 【问题描述】:

我在子类UIView 的自定义类中使用了UIScrollView。在该滚动视图中,我添加了其他几个自定义对象(所有子类都是 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++;
    

然后我尝试查看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);

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

几个观察:

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

对此感到困惑,非常感谢任何帮助。

【问题讨论】:

什么是 pageCheck...?将标签设置为计数而不是 pageCheck。 pageCheck 是一个 int,它在循环中递增,但也与其他事物耦合,这就是我不使用“count”的原因。当它 pageCheck 是 6 的倍数时,我需要它返回到 0,我无法使用“count”轻松做到这一点,因此 iVar pageCheck 【参考方案1】:
-(void)schemeTouchedAtIndex:(UITapGestureRecognizer *)gesture
NSLog(@"%ld", gesture.view.tag);

由于您的手势与 ColorScheme 对象挂钩,因此从手势识别器本身获取视图就不那么麻烦了。

【讨论】:

谢谢!!!天哪,我知道必须有一些简单的方法才能做到这一点。出于某种原因,当我查看文档时,我并没有认为手势具有作为属性的视图。很好的解决方案 有时我忘记查看父类,想知道方法到底在哪里。

以上是关于从 UITapGestureRecognizer 获取对象的标签的主要内容,如果未能解决你的问题,请参考以下文章

iOS 为啥不能从 UITapGestureRecognizer 调用方法 collectionView:didSelectItemAtIndexPath:?

无法从情节提要中的 UITapGestureRecognizer 拖动 IBAction

使用 UITapGestureRecognizer 从点击的单元格中获取标签文本

如何为 UITapGestureRecognizer 从不同的 UIView 对象设置选择器

使用 UITapGestureRecognizer 无法识别的选择器

UITapGestureRecognizer 的动作在进行中时无法调用?