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

问题描述 投票:-2回答:1

我在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)
  }
}
ios swift uilabel uitapgesturerecognizer swift-playground
1个回答
1
投票

您似乎是以编程方式创建视图控制器,因为您只在loadView中操作(您正确地没有调用super),这需要您创建该控制器的实际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()

或者,您可以使用viewDidLoad(需要您调用super)来复制非编程视图控制器。

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()

此外,您的origin-x值超出界限,这就是为什么您可能没有看到标签,并且您缺少Swift 4中所需的@objc语法。

© www.soinside.com 2019 - 2024. All rights reserved.