извлекать данные из Firebase и использовать текстовое поле для предварительного просмотра и обновления - PullRequest
1 голос
/ 02 июля 2019

Я хочу использовать одни и те же объекты одного ViewController для сохранения в Firebase и для извлечения сохраненных данных для предварительного просмотра и обновления при необходимости.

This image to show how it look likes.

Изначально я использовал текстовое поле в статических ячейках, оно работало довольно хорошо, но мне не удалось вставить текст в текстовое поле в динамической ячейке.Когда я вызываю функцию print для текстового поля в консоли, она выводит правильное значение, но ничего не показывает на экране симулятора.Я даже пытался использовать простую текстовую строку для помещения ее в текстовое поле, но безуспешно.

здесь приведен связанный код из TextMessageViewController, который я использую для отправки данных в Firebase через текстовые поля в динамических табличных ячейках

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: TextInputTableViewCell = receiverEmailTableView.dequeueReusableCell(withIdentifier: "ReceiverEmail") as! TextInputTableViewCell!
cell.recepientEmailTF.delegate = self
cell.recepientEmailTF.tag = indexPath.row
return cell
}
 func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {

if MyGlobalVariables.emails.count <= 3 {
    print("tag master = \(textField.tag)")
    switch textField.tag {
    case 0:
        if MyGlobalVariables.emails.endIndex == 0 {
            MyGlobalVariables.emails.append(textField.text!)
        }
        MyGlobalVariables.emails[0] = textField.text!
    case 1:
        if MyGlobalVariables.emails.endIndex == 1 {
            MyGlobalVariables.emails.append(textField.text!)
        }
        MyGlobalVariables.emails[1] = textField.text!
    case 2:
        if MyGlobalVariables.emails.endIndex == 2 {
            MyGlobalVariables.emails.append(textField.text!)
        }
        MyGlobalVariables.emails[2] = textField.text!
    default:
        print("exceeded")
    }
    DispatchQueue.main.async {
        self.receiverEmailTableView.reloadData()
    }
} else {
    print("exceeded emails limit, add alert")
}
}

Часть кода из TextPreviewViewController, из которого я хочу получить данные Firebase и добавить их в текстовые поля.Этот viewcontroller подключен к предварительному просмотру viewcontroller в раскадровке

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let edit = UITableViewRowAction(style: .default, title: "Edit") { (action, indexPath) in

    let newMessageVC = self.storyboard?.instantiateViewController(withIdentifier: "TextMessage") as? TextMessageViewController

    newMessageVC?.modalPresentationStyle = .overCurrentContext
    self.present(newMessageVC!, animated: true, completion: {
        let updateButton = newMessageVC?.saveOrUpdateButton
        updateButton?.titleLabel?.text = "Update"
        let messageBody = newMessageVC?.messageTV
        let dateField = newMessageVC?.tergetDateTF

        let action = MyGlobalVariables.refMessages.child(MyGlobalVariables.uidUser!)

        // CONCERN POINT: from here->           
        let cell1: TextInputTableViewCell = newMessageVC?.receiverEmailTableView.dequeueReusableCell(withIdentifier: "ReceiverEmail") as! TextInputTableViewCell!
        cell1.recepientEmailTF.delegate = self
                    cell1.recepientEmailTF.allowsEditingTextAttributes = true

        let texfielf = cell1.recepientEmailTF

        MyGlobalVariables.emails.removeAll()

        MyGlobalVariables.emails = ["","",""]

       // cell1.recepientEmailTF.text = "Suka blyat" <- even this simple text doesnt appear

        MyGlobalVariables.emails[0].append(self.messages[indexPath.row].email1!)           
        texfielf?.text = MyGlobalVariables.emails[0]            
       //cell1.recepientEmailTF.text =  MyGlobalVariables.emails[0] <- this code also doesnt work           

        MyGlobalVariables.emails[1].append(self.messages[indexPath.row].email2!)           
         texfielf?.text = self.messages[indexPath.row].email2!

        MyGlobalVariables.emails[2].append(self.messages[indexPath.row].email3!)
        texfielf?.text = self.messages[indexPath.row].email3!

        DispatchQueue.main.async {
            newMessageVC?.receiverEmailTableView.reloadData()
        }
       //CONCERN POINT: ->up to here


        messageBody?.text = self.messages[indexPath.row].message!
        dateField?.text = self.messages[indexPath.row].setupDate!

        if let autoID2 = self.messages[indexPath.row].autoID {
            MyGlobalVariables.messageForUpdate1.append(autoID2) }
    })

}

return [edit]
}

Мой открытый класс класса UITableViewCell TextInputTableViewCell: UITableViewCell, UITextFieldDelegate {

@IBOutlet weak var recepientEmailTF: UITextField!

override public func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override public func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
}}

Буду признателен за любую помощь или советы.

...