class ProductManagement : UIViewController, UITextFieldDelegate{
var productInputText: String = ""
@IBOutlet weak var ProductName: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
ProductName.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
}
@objc private func textFieldDidChange(_ sender: UITextField) {
productInputText = sender.text ?? ""
}
}
Это сохранит ваш вводимый текст в переменной в основном с изменениями редактирования прослушивания.
И если я не ошибаюсь, вы используете UploadImage
в классе ProductManagement
. Добавьте свойство функции в UploadImage
, как показано ниже
class XUpload {
static func UploadImage(Image : UIImage, productName: String, 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)
}
}
}
}
, и вызовите его в классе ProductManagement
, как показано ниже.
XUpload.UploadImage(image: myImage, productName: productInputText, Completion: {
}
EDIT:
После получения комментарий, я решил, что лучше всего использовать Notification
, вы используете UITextField
в классе ProductManagement, поэтому нет необходимости обрабатывать их метод delegate
в XUpload
Опишите имя уведомления
extension Notification.Name {
public static var TextChange = Notification.Name("TextChange")
}
В ProductManagement
, textDidChange
текст сообщения метода в Notification
@objc private func textFieldDidChange(_ sender: UITextField) {
NotificationCenter.default.post(name: .TextChange, object: nil, userInfo: ["text": sender.text])
}
Я конвертирую ваш XUpload
класс в Singleton
класс.
class XUpload {
private init() {
NotificationCenter.default.addObserver(self, selector: #selector(handle(_:)), name: .TextChange, object: nil)
}
public static var Shared = XUpload()
@objc private func handle(_ sender: Notification) {
if let userInfo = sender.userInfo as NSDictionary?, let text = userInfo["text"] as? String {
textFieldText = text
}
}
var textFieldText: String = "" {
didSet {
print("updated value > " , textFieldText)
}
}
static func uploadImage() {
// use updated textfield text with textFieldText
}
}
Затем сохраните переменную в классе ProductManagement
как одноэлементный объект, и это сработает для вас. Текст в текстовом поле обновляется при каждом изменении в классе XUpload
.
class ProductManagement : UIViewController, UITextFieldDelegate{
var staticVariable = XUpload.Shared
}