Про TextField и возможности которые он предоставляют
Я пытаюсь повторить приложение от Сяоми - конвертер валют. Там имеется 3 поля для ввода. В зависимости от того, какое поле выделено основным при вводе результата, будут меняться данные. Возник вопрос - реально ли такое повторить в Xcode? А то я дизайн приложения повторил, а саму конвертацию настроить не могу.
Еще раз, как должно работать: 3 TextField. При выборе одного из TF и вводе данных в него, другие ТF показывают необходимые данные - цена валюты
Ответы (1 шт):
В простейшем виде это может быть что-то подобное, здесь через сториборд привязаны события получения и потери фокуса полей, а также событие изменения значений полей при вводе с клавиатуры, в данном варианте печатаемое значение из активного поля просто копируется в два других поля, вы можете сделать конвертацию значений в методах.
import UIKit
class ViewController: UIViewController {
@IBOutlet var textField1: UITextField!
@IBOutlet var textField2: UITextField!
@IBOutlet var textField3: UITextField!
private var activeTextField: UITextField?
// MARK: --
func updateTextField1(value: String?) {
guard let activeTextField = activeTextField else { return }
if activeTextField == textField2 {
// TODO: process value
} else { // textField3
// TODO: process value
}
textField1.text = value
}
func updateTextField2(value: String?) {
guard let activeTextField = activeTextField else { return }
if activeTextField == textField1 {
// TODO: process value
} else { // textField3
// TODO: process value
}
textField2.text = value
}
func updateTextField3(value: String?) {
guard let activeTextField = activeTextField else { return }
if activeTextField == textField1 {
// TODO: process value
} else { // textField2
// TODO: process value
}
textField3.text = value
}
// MARK: UI Events
@IBAction func textFieldEditingDidBegin(_ sender: UITextField) {
activeTextField = sender
}
@IBAction func textFieldEditingDidEnd(_ sender: UITextField) {
activeTextField = nil
}
@IBAction func textFieldEditingChanged(_ sender: UITextField) {
switch sender {
case textField1:
updateTextField2(value: sender.text)
updateTextField3(value: sender.text)
case textField2:
updateTextField1(value: sender.text)
updateTextField3(value: sender.text)
case textField3:
updateTextField1(value: sender.text)
updateTextField2(value: sender.text)
default:
break
}
}
}