Как редактировать ярлык с помощью 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. Это дает вид метки, и при нажатии ее можно редактировать.
- Создайте UITextfield с помощью раскадровки
- Подключите выход UITextfield из раскадровки к файлу контроллера представления
- Назначьте значение розетки с наблюдателем
@IBOutlet weak var barTextField: UITextField! {
didSet {
self.barTextField.delegate = self // for step 4
barTextField.text = "value here"
}
}
- Расширить viewcontroller с помощью UITextFieldDelegate, который совпадает с делегатом на шаге 3
- Реализуйте несколько дополнительных функций в 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
) на ваш лейбл. Теперь, когда пользователь нажимает на него, вы можете включить текстовое поле, а в методе делегирования текстовых полей вы можете преобразовать его в метку.