如何确定UILabel的点击来自何处?

时间:2019-05-10 23:24:31

标签: ios swift xcode uikit uilabel

在我的程序中,运行“ newFrees”功能时,它应该激活单击某些标签的功能。根据用户单击的标签,它应该执行不同的操作。我已经到了可以按下一个标签时让它运行一个函数的地步,但是我不知道如何使该函数识别哪个标签调用了它。有什么方法可以识别调用它的标签的名称?

func newFrees() -> Void {

    BM1.isUserInteractionEnabled = true
    BT2.isUserInteractionEnabled = true
    let tap1 = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapFunction))
    let tap2 = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapFunction))
    BM1.addGestureRecognizer(tap1)
    BT2.addGestureRecognizer(tap1)
}

...

@objc func tapFunction(sender:UITapGestureRecognizer) {
    print("tap working")
}

// BM1和BT2是标签。

还有,有没有一种方法不必使用“ let tap1”和“ let tap2”?每当我将其定义为“ tap”,然后将其添加到BM1和BT2时,BT2都可以工作,但BM1则不行。

2 个答案:

答案 0 :(得分:1)

您可以尝试

IonicStorageModule.forRoot()

您必须为每个对象创建一个tap实例,创建一个tap实例并将其添加到2个对象中,否则最后一个添加到

对象的对象将处于活动状态
@objc func tapFunction(sender:UITapGestureRecognizer) {
  if bm1 == sender.view {
     print("bm1 clicked")
  }
  else {
     print("bt2 clicked")
   }
}

答案 1 :(得分:0)

您可以尝试使用这样的标签。...

func newFrees() -> Void {

    BM1.isUserInteractionEnabled = true
    BT2.isUserInteractionEnabled = true
    BTM1.tag = 1
    BTM2.tag = 2
    let tap1 = UITapGestureRecognizer(target: self, action: #selector(ViewController.tapFunction))
    BM1.addGestureRecognizer(tap1)
    BT2.addGestureRecognizer(tap1)
}

    @objc func tapFunction(sender:UITapGestureRecognizer) {
        print("tap working")
        print("tap working")
        guard let label = sender.view as? UILabel else { return }
        switch label.tag {
        case 1:
            //DO stuff with label 1
        case 2:
            //Do Stuff with label 2
        default:
            break
        }
    }
}