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

[UITapGestureRecognizer tag]: unrecognized selector sent to instance

提问人:Wodjefer 提问时间:10/3/2013 最后编辑:Pranav SinghWodjefer 更新时间:8/12/2020 访问量:15154

问:

我正在安排一系列,并为其分配一个识别器imageviewTapView

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

我将选择器定义为:

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

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

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

Objective-C iOS4 XCODE4.5

评论


答:

7赞 Fogmeister 10/3/2013 #1

既不声明也未声明名为 的属性或方法。UITapGestureRecognizerUIGestureRecognizertag

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

在相关的说明中。我真的不喜欢一般使用。总有一种更好的方法可以在不使用 .tagtag

评论

0赞 Fogmeister 10/3/2013
@Wodjefer 你想用什么做什么?即你为什么要使用它?如果我知道,我可以提出更好的方法。tag
0赞 Wodjefer 10/3/2013
实际上,我安排了一系列图像视图,当它滚动浏览图像视图时,我会得到预览。就像我们在iPhone图库(iOS7)中一样
2赞 Fogmeister 10/3/2013
啊,iPhone照片应用程序使用一个来布局图像。它的工作方式很像一个,并为您完成所有敲击。这样你就根本不需要了,同时显示所有照片的内存效率要高得多。UICollectionViewUITableViewUITapGestureRecognizer
0赞 Fogmeister 10/3/2013
我建议看看这个教程......raywenderlich.com/22324/......
3赞 Toseef Khilji 10/3/2013 #2

你不能得到它的属性,而是你必须得到它的视图的属性,tagUITapGestureRecognizer

你可以试试,

-(void)action:(id)sender
  {
     NSLog(@"TESTING TAP");
     NSLog (@"%d",[[sender view]tag]);

  }

评论

0赞 shrishaster 3/28/2014
非常感谢。其他方法对我不起作用!
38赞 Nirav Gadhiya 10/3/2013 #3

你可以用这个..

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

在行动中试试这个..

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

说明:

UITapGestureRecognizer没有像 .但它有 属性 ,您可以从此属性访问附加的视图。tagviewUITapGestureRecognizer

希望对你有所帮助

评论

0赞 Nirav Gadhiya 10/3/2013
欢迎并随时为您提供任何帮助。请接受答案,以便其他用户可以从您的帖子中获得帮助
1赞 iOS Developer 8/29/2018
请 swift 等价物??@NiravGadhiya
10赞 BhavikKama 10/3/2013 #4

只需使用以下命令更改您的选择器方法。它会起作用的

TapGesture 将拥有被点击的整个视图。然后你可以从中获取标签属性,正如我在下面所述

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

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

    }
5赞 Starsky 8/12/2020 #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)

这是由点击触发的功能:

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

评论

0赞 Jan L 3/25/2022
这行得通!多年来,我一直在寻找 Swift 解决方案,谢谢!
0赞 Mr. T. 8/23/2023
对于任何正在寻找解决方案的人,请不要使用发送者作为视图。使用此解决方案,它将起作用。谢谢!