[英]How can I edit a UILabel upon touching it in Swift?
我想知道如何在應用程序運行時編輯 label 文本。
示例:將有 label 稱為“點擊更改文本”。 當用戶點擊它時,它將變為可編輯狀態,用戶可以輸入文本並進入。 然后它將更改為新文本。
我知道這可以使用UITextFieldDelegate,
但我不知道如何處理它,因為當用戶觸摸它時無法對 label 執行操作。
您不能像編輯 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 視頻中的風格,可以在標簽字段的“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 會更好。 這給出了一個標簽的外觀,點擊它是可編輯的。
@IBOutlet weak var barTextField: UITextField! {
didSet {
self.barTextField.delegate = self // for step 4
barTextField.text = "value here"
}
}
textFieldShouldReturn
來檢測何時按下回車鍵func textFieldShouldReturn(_ textField: UITextField) -> Bool {
barTextField.resignFirstResponder()
return true
}
將 TapGesture ( UITapGestureRecognizer
) 添加到您的標簽。 現在,當用戶點擊它時,您可以啟用文本字段 & 在文本字段委托方法中,您可以將其轉換為標簽。
我根據 Dharmesh 的回答對選擇器進行了一些調整。 希望這可以幫助。
進口 UIKit
class 視圖控制器: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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.