Как редактировать ярлык с помощью Touch IOS SWIFT

Я хочу знать, как редактировать метку текста во время работы приложения.

Пример: будет ярлык "Нажмите, чтобы изменить текст" . когда пользователь нажимает, он будет редактируемым, и пользователь может вводить текст и вводить. тогда он изменится на новый текст.

я знаю, что это можно сделать с помощью UITextFieldDelegate, но я не знаю, как подойти к нему. потому что нет способа поместить действие в метку, когда пользователь прикасается к нему

5 ответов

Решение

Вы не можете редактировать метку так же, как вы редактируете 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 сюда и напомнить мне о стиле в последних видеороликах Пола Хегарти из Стэнфордского университета, настройку можно выполнить в "didSet" метки Field - вы также можете настроить разные респонденты для разных меток следующим образом:

@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. Расширить viewcontroller с помощью UITextFieldDelegate, который совпадает с делегатом на шаге 3
  2. Реализуйте несколько дополнительных функций в UITextFieldDelegate, включая textFieldShouldReturn чтобы определить, когда была нажата клавиша ввода
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        barTextField.resignFirstResponder()
        return true
    }

Я внес некоторые коррективы в селектор из ответа Дхармеша. Надеюсь это поможет.

импортировать 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
}

}

Добавить TapGesture (UITapGestureRecognizer) на ваш лейбл. Теперь, когда пользователь нажимает на него, вы можете включить текстовое поле, а в методе делегирования текстовых полей вы можете преобразовать его в метку.

Другие вопросы по тегам