在Firebase中为TextView Swift保存字体和大小的方法是什么
我想在Firebase中为Swift中的TextView保存字体、大小和对齐方式 这样我就可以从另一个角度来看待它 我只能将颜色保存在Firebase中。 下面是显示我是如何做到这一点的代码在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) {
@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)
}
}
})
}