Запуск кода, если текстовое поле содержит определенный текст

#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
    }
    }