在Firebase中为TextView Swift保存字体和大小的方法是什么

在Firebase中为TextView Swift保存字体和大小的方法是什么,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我想在Firebase中为Swift中的TextView保存字体、大小和对齐方式 这样我就可以从另一个角度来看待它 我只能将颜色保存在Firebase中。 下面是显示我是如何做到这一点的代码 @IBAction func SendBtn(_ sender: Any) { if let profileImage = SelecSubStorge , let profileIMG = profileImage.jpegData(compressionQuality: 0.1) {

我想在Firebase中为Swift中的TextView保存字体、大小和对齐方式 这样我就可以从另一个角度来看待它

我只能将颜色保存在Firebase中。 下面是显示我是如何做到这一点的代码

@IBAction func SendBtn(_ sender: Any) {

    if let profileImage = SelecSubStorge , let  profileIMG = profileImage.jpegData(compressionQuality: 0.1) {
        
        let udidImage = NSUUID().uuidString
        let storeg = Storage.storage().reference(withPath: "gs://myproduct-744cb.appspot.com").child(udidImage)
        
        storeg.putData(profileIMG, metadata: nil) { metaDate, error in
            if error != nil {
                print(error?.localizedDescription)
                return
            } else {
                storeg.downloadURL { url, error in
                    let imgSub = url?.absoluteString
                    
                    let ref = Database.database().reference()
                    let sub = ref.child("Sub")
                    let udid = sub.childByAutoId().key
                    let setRef = sub.child(udid!)
                    let value = ["sub": self.subjectLB.text , "detiles" : self.detilesTextview.text , "ImgSub" : imgSub , "SubID" : udid , self.labelColor : "Color"] as [AnyHashable : Any]
                    setRef.setValue(value) { error, ref in
                        if error != nil {
                            print(error?.localizedDescription)
                        } else {
                            let alert = UIAlertController(title: "Done", message: "Done Send", preferredStyle: UIAlertController.Style.alert)
                                    alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: nil))
                                    self.present(alert, animated: true, completion: nil)
                        }
                    }
                }
            }
        }
    }
}

@IBAction func ChangeColorBtn(_ sender: Any) {
    let colorPicher = UIColorPickerViewController()
    colorPicher.delegate = self
    present(colorPicher, animated: true, completion: nil)
}
func colorPickerViewControllerDidSelectColor(_ viewController: UIColorPickerViewController) {
    
    let color = viewController.selectedColor
    detilesTextview.textColor = color
    labelColor = color
}

根据您提供的代码,您可以按以下行添加更多字体、大小、对齐方式或其他数据:)


仅供参考:Firebase支持多种数据类型,但并非所有数据类型,请参阅此链接,以了解以下方法。首先,看看我对这个问题的回答,看看它在Firestore中完成了什么

这个答案将适用于Realmtime数据库,但他的概念是类似的

将属性化字符串从textView强制转换为NSData,然后将其作为字符串存储在Firebase中

Firebase支持NSString(Swift中的字符串),但仅支持实际的UTF-8字符,而不支持格式和样式

因此,关键是将textView中的文本捕获为属性字符串,将其归档为NSData(数据),然后将其文本版本base64Encoded保存在Firebase中。然后,当阅读时,做相反的事情

下面介绍如何在Firebase中存储sourceTextView中的文本

func saveAttrStringToFirebase() {
    let attrString = self.sourceTextView.attributedString()

    do {
        let data = try NSKeyedArchiver.archivedData(withRootObject: attrString, requiringSecureCoding: false)
        let dataString = data.base64EncodedString()

        let ref = self.ref.child("attributed_string") //self.ref points to my Firebase
        ref.setValue(dataString)
    } catch let err as NSError {
        print(err.localizedDescription)
    }
}
那么Firebase看起来就像这样

root
   attributed_string: "YnBsaXN0MDDUAQIDB..."
然后读回字符串处的值,它将只是一个字符串。然后将其转换回数据,最后取消归档

func getAttrStringFromFirebase() {
    let ref = self.ref.child("attributed_string")
    ref.observeSingleEvent(of: .value, with: { snapshot in
        if let dataString = snapshot.value as? String {
            do {
                guard let data = Data(base64Encoded: dataString) else { return }
                guard let attrString = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSAttributedString.self, from: data) else { return }

                self.destinationTextView.textStorage?.append(attrString)
            } catch let err as NSError {
                print(err.localizedDescription)
            }
        }
    })
}

谢谢你的回复,我知道我想要一个可以保存这个的代码,这个答案和从文本视图保存字符串属性有什么关系,这就是OP要问的?例如,他们想存储一个字符串“Hello,World”是粗体的,带下划线的,Helvetica是18点;您要问的是如何将字符串属性保存到Firebase,这无法直接完成,因为它不支持NSAttributedString类型。e、 g.它只能存储UTF-8文本。看看我对这个问题的回答,看看是否有帮助。
func getAttrStringFromFirebase() {
    let ref = self.ref.child("attributed_string")
    ref.observeSingleEvent(of: .value, with: { snapshot in
        if let dataString = snapshot.value as? String {
            do {
                guard let data = Data(base64Encoded: dataString) else { return }
                guard let attrString = try NSKeyedUnarchiver.unarchivedObject(ofClass: NSAttributedString.self, from: data) else { return }

                self.destinationTextView.textStorage?.append(attrString)
            } catch let err as NSError {
                print(err.localizedDescription)
            }
        }
    })
}