【发布时间】:2020-11-01 10:36:44
【问题描述】:
我在主 VC 中有 UITextField 的 Outlet,我想从另一个类访问它的文本...更多说明请参见下面的代码:
class ProductManagement : UIViewController, UITextFieldDelegate{
@IBOutlet weak var ProductName: UITextField!
}
我想阅读下面课程中的文字
import Firebase
import FirebaseStorage
class XUpload {
static func UploadImage(Image : UIImage, Completion : @escaping (_ url : String)->()) {
guard let imageData = Image.pngData() else { return }
let storage = Storage.storage().reference()
let pathRef = storage.child("Images/Products")
let imageRef = pathRef.child( // I want the product name to be written here! )
imageRef.putData(imageData, metadata: nil) { (meta, error) in
imageRef.downloadURL { (url, error) in
print (url as Any)
}
}
}
}
我尝试创建一个自定义协议来委派 UITextField,但问题是我无法在 XUpload 类中符合它!!
请有人帮我写一下我的代码应该是怎样的,因为我是 Swift 语言的初学者和新手。
提前谢谢你。
编辑:
Elia 答案应用如下:
ProductManagement 类 + 扩展
class ProductManagement : UIViewController, UITextFieldDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.ProductName.delegate = self
}
@IBOutlet weak var ProductName: UITextField!
@objc private func textFieldDidChange(_ sender: UITextField) {
NotificationCenter.default.post(name: .PnameInputText, object: nil, userInfo: ["text": sender.text!])
}
}
extension Notification.Name {
public static var PnameInputText = Notification.Name("PnameInputText")
}
XUpload 类
import Firebase
import FirebaseStorage
class XUpload {
private init() {
NotificationCenter.default.addObserver(self, selector: #selector(handle(_:)), name: .PnameInputText, object: nil)
}
public static var shared = XUpload()
var textFieldText : String = "" {
didSet {print("updated value > ", textFieldText)}
}
@objc private func handle(_ sender: Notification) {
if let userInfo = sender.userInfo as NSDictionary?, let text = userInfo["text"] as? String {
textFieldText = text
}
}
static func UploadImage(Image : UIImage, Completion : @escaping (_ url : String)->()) {
guard let imageData = Image.pngData() else { return }
let storage = Storage.storage().reference()
let pathRef = storage.child("Images/Products")
let imageRef = pathRef.child("img_"+shared.textFieldText)
print("var of textFieldText value: " + shared.textFieldText) //print nothing... empty value!!
imageRef.putData(imageData, metadata: nil) { (meta, error) in
imageRef.downloadURL { (url, error) in
print ("Image uploaded to this link >> " + url!.description)
guard let str = url?.absoluteString else { return }
Completion (str)
}
}
}
}
extension UIImage {
func upload(completion : @escaping (_ url : String) ->()) {
XUpload.UploadImage(Image: self) { (ImageURL) in completion (ImageURL)
}
}
}
如您所见,通知中心没有给 var textFieldText 赋值!为什么??
【问题讨论】:
-
您想从哪里访问文本字段?
-
@luckystars 在 XUpload 类里面 (static func UploadImage)...提前谢谢你的帮助
标签: swift inheritance protocols subclass