簡體   English   中英

如何在 Swift 中觸摸 UILabel 后對其進行編輯?

[英]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 會更好。 這給出了一個標簽的外觀,點擊它是可編輯的。

  1. 通過故事板創建 UITextfield
  2. 將故事板中的 UITextfield 插座連接到視圖控制器文件中
  3. 用觀察者分配插座的值
     @IBOutlet weak var barTextField: UITextField! {
            didSet {
                self.barTextField.delegate = self // for step 4
                barTextField.text = "value here"
            }
        }
  1. 使用 UITextFieldDelegate 擴展 viewcontroller,與步驟 3 中的委托重合
  2. 在 UITextFieldDelegate 中實現幾個可選函數,包括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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM