从 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 对象设置选择器