#arrays #swift #uitextfield
#массивы #swift #uitextfield
Вопрос:
Я пытаюсь запустить код, когда текстовое поле содержит определенный текст. Если пользователь вставляет «John» в текстовое поле, я хочу запустить loadData1()
функцию, и если пользователь вставляет «Sara» в текстовое поле, я хочу запустить loadData2()
. Я провел много исследований на YouTube и Stack Overflow, но я не нашел никакого способа, поэтому я решил использовать оператор if, но и это не сработало для меня.
import UIKit
import FirebaseFirestore
import Firebase
import FirebaseAuth
class orderTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
@IBOutlet var order: UITableView!
var db: Firestore!
var firstName = [String]()
var lastName = [String]()
override func viewDidLoad() {
super.viewDidLoad()
db = Firestore.firestore()
let view1 = firstViewController()
if view1.firstName.text == "John" {
loadData1
}
if view1.firstName.text == "Sara" {
loadData2()
}
}
}
func loadData1() {
db.collection("lastname").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: (err)");
}
else
{
for document in querySnapshot!.documents {
self.lastName.append(document.get("lastname") as? String ?? "")
}
self.order.reloadData()
}
}
}
func loadData2() {
db.collection("lastname").getDocuments()
{
(querySnapshot, err) in
if let err = err
{
print("Error getting documents: (err)");
}
else
{
for document in querySnapshot!.documents {
self.lastName.append(document.get("lastname") as? String ?? "")
}
self.order.reloadData()
}
}
}
Комментарии:
1. Немного не по теме, но не было бы лучше использовать для этого какой-либо другой тип элемента управления, например, средство выбора или переключатели или тому подобное с конечным числом вариантов на выбор
Ответ №1:
Вы должны установить делегат вашего текстового поля для текущего класса (например, ViewController) при инициализации вашего класса (например, в вашем viewDidLoad), вот так:
view1.firstName.delegate = self
А затем добавьте этот метод в свой ViewController, который является делегатом вашего текстового поля:
func textFieldDidBeginEditing(textField: UITextField) {
// check your text here and do whatever you need
}
Комментарии:
1. Привет, Аббас, я пробовал ваш код, но он не работает, но если вы знаете о firebase, у меня много коллекций в firestore, и я хочу предоставить каждому пользователю разные коллекции. вы знаете, как я могу этого добиться?
Ответ №2:
Для проверки изменений текста в a UITextField
вы можете сделать это:
override func viewDidLoad() {
//...
yourTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}
@objc func textFieldDidChange(){
print(yourTextField.text)
// check for specific text here
}
Ответ №3:
Используйте textFieldDidBeginEditing
функцию
func textFieldDidBeginEditing(textField: UITextField) {
// check your text here and do whatever you need
if yourTextField.text == "You text" {
// Text did match
} else {
// Text Did not match
}
}