使用 UITextField 字符串更改 UIView 颜色

Changing UIView color with a UITextField String

我有一个非常简单的应用程序,可以将 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)"

    }
}

您可以简单地设置 p1ViewColor.backgroundColor = UIColor.red 例如

但首先你应该re-design你的数据结构,这就是你挣扎的原因。

据我了解,可以有两种状态 Present 和 Absent,这可以通过 docSnapshot 中的简单 Bool 来实现。假设有一个简单的变量,称为 "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
    }
}

更漂亮,更易于阅读。