哪个对象被挖掘?

我是手势识别器的新手,所以也许这个问题听起来很愚蠢:我将点击手势识别器分配给一堆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 (或其他元素,取决于你试图跟踪的内容)结合使用,以获得更高级的方法。

  • 将UITapGestureRecognizer添加到例如UIButton中(您也可以将其添加到UIViews等)或者使用for-loop和第二个数组作为轻敲手势的一大堆项目。
  •     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; 可用于缩略图+按钮列表等。

    链接地址: http://www.djcxy.com/p/30675.html

    上一篇: which object was tapped?

    下一篇: Detecting taps on attributed text in a UITextView in iOS