【问题标题】:[UITapGestureRecognizer tag]: unrecognized selector sent to instance[UITapGestureRecognizer tag]:发送到实例的无法识别的选择器
【发布时间】:2013-10-09 18:15:30
【问题描述】:

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

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


    【解决方案1】:

    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"
    }
    

    【讨论】:

      【解决方案2】:

      只需使用以下内容更改您的选择器方法......它会起作用

      tapgesture 将拥有被点击的整个视图.. 然后您可以从中获取标签属性,正如我在下面所说的那样

      -(void)action:(UITapGestureRecognizer *)tapGesture{
      
           NSLog(@"TESTING TAP");
              NSLog (@"%d",tapGesture.view.tag);
      
          }
      

      【讨论】:

        【解决方案3】:

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

        你可以试试,

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

        【讨论】:

        • 非常感谢。其他方法对我不起作用!
        【解决方案4】:

        你可以用这个..

        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 没有像tag 这样的属性。但它有属性view,从这个属性你可以访问附加UITapGestureRecognizer的视图。

        希望对你有帮助

        【讨论】:

        • 欢迎并随时提供任何帮助。并请接受答案,以便其他用户可以从您的帖子中获得帮助
        • swift 等价物好吗?? @NiravGadhiya
        【解决方案5】:

        UITapGestureRecognizerUIGestureRecognizer 均未声明名为 tag 的属性或方法。

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

        在相关说明中。一般来说,我真的不喜欢使用tag。在不使用tag 的情况下,总有更好的方法来完成您正在做的事情。

        【讨论】:

        • @Wodjefer 你想用tag做什么?即你为什么使用它?如果我知道我可以提出更好的方法。
        • 实际上,我安排了一系列图像视图,当它滚动浏览图像视图时,我会得到预览......就像我们在 iphone 画廊(ios7)中所做的那样
        • 啊,iPhone 照片应用程序使用UICollectionView 来布置图像。它的工作原理很像UITableView,并为您完成所有的敲击工作。这样你就根本不需要UITapGestureRecognizer,同时显示所有照片的内存效率要高得多。
        • 我建议看看这个教程...raywenderlich.com/22324/…
        猜你喜欢
        • 2014-09-21
        • 1970-01-01
        • 2019-08-28
        • 2012-07-24
        相关资源
        最近更新 更多