Изменение цвета UIView с помощью строки UITextField - PullRequest
1 голос
/ 13 июня 2019

У меня есть очень простое приложение, которое отправляет Absent / Present в Firestore, и метка меняется на то, что отправляется на сервер.

UILabel находится внутри UIView, и я хотел бы изменить цветкрасный, когда метка отсутствует, зеленый, если присутствует.

Как я могу это сделать?

@IBOutlet weak var p1ViewColor: UIView!
@IBOutlet weak var p1Label: UILabel!
@IBOutlet weak var p1ABTF: UITextField!
@IBOutlet weak var p1PRTF: UITextField!


// fetch data and display it
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    pListener = docRef.addSnapshotListener { (docSnapshot, error ) in
        guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
        let myData = docSnapshot.data()
        let absent1 = myData?["Absent"] as? String ?? ""
        let present1 = myData?["Present"] as? String ?? ""
        self.p1Label.text = "\(absent1) \(present1)"

    }
}

1 Ответ

0 голосов
/ 13 июня 2019

Вы можете просто установить p1ViewColor.backgroundColor = UIColor.red например

Но, прежде всего, вам следует изменить структуру структуры данных , поэтому вы боретесь.

Насколько я понимаю, может быть два состояния Присутствие и Отсутствие, и этого можно достичь с помощью простого Bool в вашем docSnapshot. Представьте, что существует простая переменная с именем "Present", которая равна true, если присутствует, и false, если она отсутствует, ваш код может выглядеть следующим образом:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    pListener = docRef.addSnapshotListener { (docSnapshot, error ) in
        guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
        guard let myData = docSnapshot.data() else { return }

        let present: Bool = myData["Present"] // "Present" is now a Boolean

        self.p1Label.text = present ? "Present" : "Absent"
        p1ViewColor.backgroundColor = present ? .green : .red
    }
}

красивее и легче для чтения.

...