我想知道如何编辑文本的标签,而应用程序正在运行。
示例:将有一个名为"点击更改文本"的标签。当用户单击它时,它将是可编辑的,用户可以输入文本和输入。然后它会变成新的文本。
我知道这可以使用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
- 从故事板连接UITextfield出口到视图控制器文件
- 用观察者给出口赋值
@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
}
}