iosswiftuitextfielddelegate

How can I edit a UILabel upon touching it in Swift?


I want to know how to edit the label of text while the app is running.

Example: there will be label called "Tap to Change text." When the user clicks it, it will be editable and the user can input text and enter. Then it will change to new text.

I know this can be done using UITextFieldDelegate,but I don't know how to approach to it because there is no way to put an action to a label when user touches it.


Solution

  • You can not edit label like you edit textField but when user click on label you can hide label and unhide textField and when user finish entering text you can again hide textField and unhide label and you can assign textField's text to label this way:

    import UIKit
    
    class ViewController: UIViewController, UITextFieldDelegate {
    
        @IBOutlet weak var lbl: UILabel!
        @IBOutlet weak var textF: UITextField!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            textF.delegate = self
            textF.hidden = true
            lbl.userInteractionEnabled = true
            let aSelector : Selector = "lblTapped"
            let tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
            tapGesture.numberOfTapsRequired = 1
            lbl.addGestureRecognizer(tapGesture)
        }
    
        func lblTapped(){
            lbl.hidden = true
            textF.hidden = false
            textF.text = lbl.text
        }
    
        func textFieldShouldReturn(userText: UITextField) -> Bool {
            userText.resignFirstResponder()
            textF.hidden = true
            lbl.hidden = false
            lbl.text = textF.text
            return true
        }
    }
    

    Hope it will help.