読者です 読者をやめる 読者になる 読者になる

UILabelのタップイベントを処理する

UILabelのタップイベントを処理して、ラベルに表示する値をアラートダイアログで入力する方法です。

UIラベルのisUserInteractionEnabledをtrueにして、touchesEndedで処理します。

class ViewController: UIViewController {
    let timerLabelTag = 10
    @IBOutlet weak var timerLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        timerLabel.tag = timerLabelTag
        timerLabel.isUserInteractionEnabled = true
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        for touch: UITouch in touches {
            let tag = touch.view!.tag
            if (tag == timerLabelTag) {
                // アラートダイアログで入力する
                let alert = UIAlertController(title: "タイマー時間セットアップ", message: "時間(秒)を入力してください", preferredStyle: .alert)
                let saveAction = UIAlertAction(title: "セット", style: .default) { (action:UIAlertAction!) -> Void in
                    
                    let textField = alert.textFields![0] as UITextField
                    timerLabel = textField.text! 
                    }
                }
                
                let cancelAction = UIAlertAction(title: "キャンセル", style: .default) { (action:UIAlertAction!) -> Void in
                }
                
                // UIAlertControllerにtextFieldを追加
                alert.addTextField { (textField:UITextField!) -> Void in
                }
                
                alert.addAction(saveAction)
                alert.addAction(cancelAction)
                
                present(alert, animated: true, completion: nil)
            }
        }
    }
}

リンク