web-dev-qa-db-ja.com

UILabelをクリック可能にする方法

UILabelをクリック可能にしたいのですが。

私はこれを試しましたが、うまくいきません。

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        let tap = UITapGestureRecognizer(target: self, action: Selector("tapFunction:"))
        tripDetails.addGestureRecognizer(tap)
    }

    func tapFunction(sender:UITapGestureRecognizer) {
        print("tap working")
    }
}
108
Daniele B

isUserInteractionEnabledラベルでtruetripDetailsに設定しようとしましたか?これでうまくいくはずです。

148

Swift 3 Update

交換する

Selector("tapFunction:")

#selector(DetailViewController.tapFunction)

例:

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...

        let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction))
        tripDetails.isUserInteractionEnabled = true
        tripDetails.addGestureRecognizer(tap)
    }

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

Swift 4 Update

 @IBOutlet weak var tripDetails: UILabel!

 override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(GameViewController.tapFunction))
    tripDetails.isUserInteractionEnabled = true
    tripDetails.addGestureRecognizer(tap)
}

@objc func tapFunction(sender:UITapGestureRecognizer) {

    print("tap working")
}
40
Xcodian Solangi

Swift 3 Update

yourLabel.isUserInteractionEnabled = true
14

Swift 5

@liorcoに似ていますが、@ objc@ IBActionに置き換える必要があります。

class DetailViewController: UIViewController {

    @IBOutlet weak var tripDetails: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...

        let tap = UITapGestureRecognizer(target: self, action: #selector(DetailViewController.tapFunction))
        tripDetails.isUserInteractionEnabled = true
        tripDetails.addGestureRecognizer(tap)
    }

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

これはXcode 10.2で機能しています。

4
Jerry Chong

良くて便利な解決策:

あなたのViewControllerで:

@IBOutlet weak var label: LabelButton!

override func viewDidLoad() {
    super.viewDidLoad()

    self.label.onClick = {
        // TODO
    }
}

ViewControllerまたは別の.Swiftファイル(CustomView.Swiftなど)にこれを配置できます。

@IBDesignable class LabelButton: UILabel {
    var onClick: () -> Void = {}
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        onClick()
    }
}

ストーリーボードで[ラベル]を選択し、フィールドクラスの[IDインスペクタ]の右側のペインでLabelButtonを選択します。

Label Attribute Inspectorの "User Interaction Enabled"で有効にするのを忘れないでください

3
researcher

そのラベルのユーザーインタラクションを有効にする必要があります.....

例えば

yourLabel.userInteractionEnabled = true

3
Abhishek

Swift 3.0の場合ジェスチャーの長押し時間も変更できます

label.isUserInteractionEnabled = true
let longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer.init(target: self, action: #selector(userDragged(gesture:))) 
longPress.minimumPressDuration = 0.2
label.addGestureRecognizer(longPress)
2

私のように見落としがちですが、UITapGestureRecognizerではなくUIGestureRecognizerを使用することを忘れないでください。

0
Devbot10