我如何编辑一个UILabel触摸它在Swift



我想知道如何编辑文本的标签,而应用程序正在运行。

示例:将有一个名为"点击更改文本"的标签。当用户单击它时,它将是可编辑的,用户可以输入文本和输入。然后它会变成新的文本。

我知道这可以使用UITextFieldDelegate,来完成,但我不知道如何接近它,因为当用户触摸它时,没有办法对标签进行操作

你不能像编辑textField那样编辑label但是当用户点击label时你可以隐藏和取消隐藏textField当用户完成输入文本时你可以再次隐藏textField和取消隐藏label你可以这样分配textField的文本给label

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
    }
}

要在这里添加我的2c,并提醒我在最新的斯坦福大学Paul Hegarty视频中的风格,可以在标签字段的"didSet"中进行设置-您还可以通过这种方式为不同的标签设置不同的响应器:

@IBOutlet weak var lblField: UILabel! {
    didSet {
        let recognizer = UILongPressGestureRecognizer()
        recognizer.addTarget(self, action: #selector(ViewController.lbllongpress))
        lblField.addGestureRecognizer(recognizer)
    }
}

,然后实现变成:

func lbllongpress(gesture: UILongPressGestureRecognizer) {
    switch gesture.state {
    case UIGestureRecognizerState.began:
        break;
    case UIGestureRecognizerState.ended:
        // Implementation here...
    default: break
    }
}

最好将标签改为UITextField。这样就得到了一个标签的外观,点击它就可以编辑了。

    通过storyboard创建UITextfield
  1. 从故事板连接UITextfield出口到视图控制器文件
  2. 用观察者给出口赋值
     @IBOutlet weak var barTextField: UITextField! {
            didSet {
                self.barTextField.delegate = self // for step 4
                barTextField.text = "value here"
            }
        }
  • 用UITextFieldDelegate扩展视图控制器,这与步骤3中的委托一致
  • 在UITextFieldDelegate中实现几个可选的功能,包括textFieldShouldReturn来检测何时按下enter键
  • func textFieldShouldReturn(_ textField: UITextField) -> Bool {
            barTextField.resignFirstResponder()
            return true
        }
    

    添加TapGesture (UITapGestureRecognizer)到您的标签。当用户点击它时你可以启用文本框&在文本字段委托方法中,可以将其转换为标签。

    我根据Dharmesh的回答对选择器做了一些调整。希望对你有帮助。

    进口UIKit

    类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 tapGesture = UITapGestureRecognizer(target: self, action: #selector(lblTapped(_:))))
        tapGesture.numberOfTapsRequired = 1
        lbl.addGestureRecognizer(tapGesture)
    }
    @objc func lblTapped(_ sender:Any){
        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
    }
    

    }

    最新更新