哪个对象被挖掘?
我是手势识别器的新手,所以也许这个问题听起来很愚蠢:我将点击手势识别器分配给一堆UIViews。 在这种方法中,有可能找出哪些是不知何故被点击的,或者我需要使用在屏幕上点击的点来找出它们?
for (NSUInteger i=0; i<42; i++) {
float xMultiplier=(i)%6;
float yMultiplier= (i)/6;
float xPos=xMultiplier*imageWidth;
float yPos=1+UA_TOP_WHITE+UA_TOP_BAR_HEIGHT+yMultiplier*imageHeight;
UIView *greyRect=[[UIView alloc]initWithFrame:CGRectMake(xPos, yPos, imageWidth, imageHeight)];
[greyRect setBackgroundColor:UA_NAV_CTRL_COLOR];
greyRect.layer.borderColor=[UA_NAV_BAR_COLOR CGColor];
greyRect.layer.borderWidth=1.0f;
greyRect.userInteractionEnabled=YES;
[greyGridArray addObject:greyRect];
[self.view addSubview:greyRect];
NSLog(@"greyGrid: %i: %@", i, greyRect);
//make them touchable
UITapGestureRecognizer *letterTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(highlightLetter)];
letterTapRecognizer.numberOfTapsRequired = 1;
[greyRect addGestureRecognizer:letterTapRecognizer];
}
使用参数as定义您的目标选择器( highlightLetter:
:)
UITapGestureRecognizer *letterTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(highlightLetter:)];
然后你可以看到
- (void)highlightLetter:(UITapGestureRecognizer*)sender {
UIView *view = sender.view;
NSLog(@"%d", view.tag);//By tag, you can find out where you had tapped.
}
这是一年问这个问题,但仍然有人。
在特定视图中声明UITapGestureRecognizer
,将标签分配为
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureHandlerMethod:)];
[yourGestureEnableView addGestureRecognizer:tapRecognizer];
yourGestureEnableView.tag=2;
并在你的处理程序中这样做
-(void)gestureHandlerMethod:(UITapGestureRecognizer*)sender {
{
if(sender.view.tag==2) {
//do something here
}
}
这里是Swift 3的更新和Mani答案的补充。 我建议使用sender.view
与标记sender.view
(或其他元素,取决于你试图跟踪的内容)结合使用,以获得更高级的方法。
let yourTapEvent = UITapGestureRecognizer(target: self, action: #selector(yourController.yourFunction))
yourObject.addGestureRecognizer(yourTapEvent) // adding the gesture to your object
在同一个testController中定义函数(这是您的View Controller的名称)。 我们将在这里使用标签 - 标签是Int ID,您可以使用yourButton.tag = 1
将它添加到UIView中。 如果你有一个像数组一样的元素的动态列表,你可以创建一个for循环,它遍历你的数组并添加一个标签,它会递增
func yourFunction(_ sender: AnyObject) {
let yourTag = sender.view!.tag // this is the tag of your gesture's object
// do whatever you want from here :) e.g. if you have an array of buttons instead of just 1:
for button in buttonsArray {
if(button.tag == yourTag) {
// do something with your button
}
}
}
所有这些原因是因为在与#selector结合使用时,无法为yourFunction传递更多参数。
如果你有一个更复杂的UI结构,并且你想让父项目的标签附加到你的点击手势上,你可以使用let yourAdvancedTag = sender.view!.superview?.tag
例如获取按钮内的UIView标签那UIView; 可用于缩略图+按钮列表等。
下一篇: Detecting taps on attributed text in a UITextView in iOS