[UITapGestureRecognizer标签]:发送到实例的无法识别的选择器

Wod*_*fer 11 objective-c ios4 xcode4.5

我正在进行一系列的imageview安排,并TapView为其分配一个识别器

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
                                         initWithTarget:self action:@selector(action:)];
[tapRecognizer setNumberOfTouchesRequired:1];
[tapRecognizer setDelegate:self];
imageView.userInteractionEnabled = YES;
[imageView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud)

我已将选择器定义为:

-(void) action:(id)sender
  {
    NSLog(@"TESTING TAP");
    NSLog (@"%d",[sender tag]);
  }
Run Code Online (Sandbox Code Playgroud)

这是崩溃,我收到错误消息: -

[UITapGestureRecognizer tag]: unrecognized selector sent to instance 0x145d0210

Nir*_*iya 34

你可以用这个..

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc]
                                         initWithTarget:self action:@selector(action:)];
[tapRecognizer setNumberOfTouchesRequired:1];
[tapRecognizer setDelegate:self];
imageView.userInteractionEnabled = YES;
imageView.tag = 1111;
[imageView addGestureRecognizer:tapRecognizer];
Run Code Online (Sandbox Code Playgroud)

并在行动中尝试这个..

-(void) action:(id)sender
  {
    NSLog(@"TESTING TAP");
    UITapGestureRecognizer *tapRecognizer = (UITapGestureRecognizer *)sender;
    NSLog (@"%d",[tapRecognizer.view tag]);
  }
Run Code Online (Sandbox Code Playgroud)

阐释:

UITapGestureRecognizer没有财产喜欢tag.但它有属性view,您可以从此属性访问UITapGestureRecognizer附加的视图.

希望它会对你有所帮助


Use*_*343 10

只需使用以下内容更改您的选择器方法即可

tapgesture将有整个视图被点击..然后你可以从它获得标签属性,如下所述

-(void)action:(UITapGestureRecognizer *)tapGesture{

     NSLog(@"TESTING TAP");
        NSLog (@"%d",tapGesture.view.tag);

    }
Run Code Online (Sandbox Code Playgroud)


Fog*_*ter 7

UITapGestureRecognizer没有UIGestureRecognizer宣布要求的财产或方法tag.

你不能使用它.这就是你收到错误的原因.

在相关的说明.我真的不喜欢tag一般使用.总有一种更好的方法可以在不使用的情况下做你正在做的事情tag.

  • 啊,iPhone 照片应用程序使用“UICollectionView”来布局图像。它的工作原理很像“UITableView”,并为您完成所有点击操作。这样您就根本不需要“UITapGestureRecognizer”,并且同时显示所有照片可以提高内存效率。 (2认同)

Sta*_*sky 5

Swift 相当于已接受的答案:

//use this to set up your tap gesture
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.reactToTap(sender:)))
imageView.tag = 33
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(tapGesture)
Run Code Online (Sandbox Code Playgroud)

这是由点击触发的函数:

@objc private func reactToTap(sender: UITapGestureRecognizer) {
            
    print("ImageView tag: ", sender.view?.tag ?? 0) //"ImageView tag: 33"
}
Run Code Online (Sandbox Code Playgroud)