在 Swift 中如何在触摸 UILabel 时对其进行编辑?
How can I edit a UILabel upon touching it in Swift?
我想知道如何在应用 运行 时编辑文本标签。
例子:会有一个名为"Tap to Change text."的标签,当用户点击它时,它会变成可编辑的,用户可以输入文字并进入。然后它将更改为新文本。
我知道这可以使用 UITextFieldDelegate,
来完成,但我不知道如何处理它,因为当用户触摸它时无法对标签进行操作。
将 TapGesture (UITapGestureRecognizer
) 添加到您的标签。
现在,当用户点击它时,您可以启用文本字段,并在文本字段委托方法中将其转换为标签。
您不能像编辑 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
}
}
希望对您有所帮助。
要在此处添加我的 2c 并提醒我最新的斯坦福大学 Paul Hegarty 视频中的样式,可以在标签 Field 的 "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。这给出了标签的外观,点击后它是可编辑的。
- 通过故事板创建 UITextfield
- 将故事板中的 UITextfield 出口连接到视图控制器文件
- 给观察者赋值outlet
@IBOutlet weak var barTextField: UITextField! {
didSet {
self.barTextField.delegate = self // for step 4
barTextField.text = "value here"
}
}
- 用 UITextFieldDelegate 扩展 viewcontroller,这与步骤 3 中的委托一致
- 在 UITextFieldDelegate 中实现几个可选函数,包括
textFieldShouldReturn
检测何时按下回车键
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
barTextField.resignFirstResponder()
return true
}
我想知道如何在应用 运行 时编辑文本标签。
例子:会有一个名为"Tap to Change text."的标签,当用户点击它时,它会变成可编辑的,用户可以输入文字并进入。然后它将更改为新文本。
我知道这可以使用 UITextFieldDelegate,
来完成,但我不知道如何处理它,因为当用户触摸它时无法对标签进行操作。
将 TapGesture (UITapGestureRecognizer
) 添加到您的标签。
现在,当用户点击它时,您可以启用文本字段,并在文本字段委托方法中将其转换为标签。
您不能像编辑 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
}
}
希望对您有所帮助。
要在此处添加我的 2c 并提醒我最新的斯坦福大学 Paul Hegarty 视频中的样式,可以在标签 Field 的 "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。这给出了标签的外观,点击后它是可编辑的。
- 通过故事板创建 UITextfield
- 将故事板中的 UITextfield 出口连接到视图控制器文件
- 给观察者赋值outlet
@IBOutlet weak var barTextField: UITextField! {
didSet {
self.barTextField.delegate = self // for step 4
barTextField.text = "value here"
}
}
- 用 UITextFieldDelegate 扩展 viewcontroller,这与步骤 3 中的委托一致
- 在 UITextFieldDelegate 中实现几个可选函数,包括
textFieldShouldReturn
检测何时按下回车键
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
barTextField.resignFirstResponder()
return true
}