如何使用touch ios swift编辑标签

时间:2015-07-16 05:54:19

标签: ios swift uitextfielddelegate

我想知道在app运行时如何编辑文本标签。

示例:将出现名为“点击更改文字”的标签。当用户点击它时,它是可编辑的,用户可以输入文字并输入。然后它将改为新文本。

我知道可以使用UITextFieldDelegate完成此操作。但我不知道如何处理它。因为当用户触摸时无法将Action置于标签

4 个答案:

答案 0 :(得分:14)

您无法像编辑textField那样编辑标签,但是当用户点击标签时您可以隐藏标签并取消隐藏textField,当用户完成输入文本后,您可以再次隐藏textField和取消隐藏标签,并且可以将textField的文本指定为标签:

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

希望它会有所帮助。

答案 1 :(得分:2)

要在这里添加我的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
    }
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

最好将标签设为UITextField。这样就可以显示标签的外观,并且在单击后可以对其进行编辑。

  1. 通过情节提要创建UITextfield
  2. 将UITextfield出口从情节提要板连接到视图控制器文件中
  3. 向观察员分配出口的价值
     @IBOutlet weak var barTextField: UITextField! {
            didSet {
                self.barTextField.delegate = self // for step 4
                barTextField.text = "value here"
            }
        }
  1. 使用UITextFieldDelegate扩展视图控制器,该控件与步骤3中的委托重合
  2. 在UITextFieldDelegate中实现几个可选功能,包括textFieldShouldReturn来检测何时按下回车键
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        barTextField.resignFirstResponder()
        return true
    }