Xcode中的Swift Playground - UILabel的TapGestureRecognizer无法正常工作

时间:2018-03-31 15:43:11

标签: ios swift uilabel uitapgesturerecognizer swift-playground

我在Xcode中创建一个Swift Playground,我将TapGestureRecognizer放到UILabel上有问题......

class MyViewController : UIViewController {

  override func loadView() {

    func tapped() {

        print("The label was tapped!")

    }

    let label11 = UILabel()
    label11.frame = CGRect(x: -350, y: 360, width: 350, height: 20)
    label11.text = "name."
    label11.textColor = .black
    label11.isUserInteractionEnabled = true
    view.addSubview(label11)

    let tap = UITapGestureRecognizer(target: self, action: "tapped")
    label11.addGestureRecognizer(tap)
  }
}

1 个答案:

答案 0 :(得分:1)

您似乎是以编程方式创建视图控制器,因为您只在loadView(正确地没有调用super)中操作,这需要您创建实际{{1}那个控制器。

view

或者,您可以使用import UIKit import PlaygroundSupport class MyViewController: UIViewController { override func loadView() { view = UIView() let label11 = UILabel() label11.frame = CGRect(x: 0, y: 360, width: 350, height: 20) label11.text = "name." label11.textColor = .yellow label11.isUserInteractionEnabled = true view.addSubview(label11) let tap = UITapGestureRecognizer(target: self, action: #selector(tapped)) label11.addGestureRecognizer(tap) } @objc func tapped() { print("The label was tapped!") } } PlaygroundPage.current.liveView = MyViewController() 复制非程序化视图控制器(这需要您调用super)。

viewDidLoad

此外,您的import UIKit import PlaygroundSupport class MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let label11 = UILabel() label11.frame = CGRect(x: 0, y: 360, width: 350, height: 20) label11.text = "name." label11.textColor = .yellow label11.isUserInteractionEnabled = true view.addSubview(label11) let tap = UITapGestureRecognizer(target: self, action: #selector(tapped)) label11.addGestureRecognizer(tap) } @objc func tapped() { print("The label was tapped!") } } PlaygroundPage.current.liveView = MyViewController() 值超出界限,这就是您可能没有看到标签的原因,并且您缺少Swift 4中所需的origin-x语法。