Проверка на заполненность всех полей в ячейке


#1

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


Можно создавать еще несколько таких же. Мне необходимо из этих textField передавать данные в экземпляр модели user. Но только в том случае, если все поля были заполнены. Т.е. каждая карточка это новый экземпляр user, я их добавляю в массив и передаю на сервер

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return cellCount + 1 // обычный int + 1, при нажатии на кнопку добавить, увеличивается и вставляет новую карточку
        }
    
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // добавление первой карточки, при загрузке экрана
        if indexPath.row == cellCount {
            
            let cell = tableView.dequeueReusableCell(withIdentifier: PastEmployementNewTableViewCell.reuseIdentifier) as! PastEmployementNewTableViewCell
            cell.addAnotherButtonClosure = { [weak self] in
                self?.cellCount += 1
                tableView.reloadData()
                DispatchQueue.main.async {
                    let indexPath = IndexPath(row: self?.cellCount ?? 0, section: 0)
                    self?.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
                }
            }
            return cell
        } else {
            
            let cell = tableView.dequeueReusableCell(withIdentifier: PastEmploymentTableViewCell.reuseIdentifier) as! PastEmploymentTableViewCell
            cell.amountTextField.textField.delegate = self
            cell.amountTextField.textField.text = amountString

// здесь мои попытки создать экземпляр юзера
                    if (cell.nameTextField.textField.text != "" && cell.amountTextField.textField.text != "" && cell.jobTextField.textField.text != "") {
                        if (userArray.count == indexPath.row) {
                            let user = User()
                            print("created user = \(user)")
                            user.namePastEmployer = cell.nameTextField.textField.text ?? "-"
                            user.jobTitle = cell.jobTextField.textField.text ?? "-"
                            user.days = days
                            user.months = months
                            user.years = years
                            userArray.append(user)
                        }
                    }
                    return cell
                }
            }

#2

Помогло решение пользователя kunal pal


#3

можно в принципе и проще. Если интересует, то могу посмотреть в одном из проектов была такая задача.


#4

интересует, если не сложно посмотрите пожалуйста


#5

ну вот как оно работает, вначале гифка, потом код.

Я уже не стал резать код на куски, кладу весь контролер, по ходу есть пояснения. Обратите внимание, что у вас в коде табл вью почему-то динамический, или вы просто используете метод cellForRowAt indexPath. Но обычно на вводе проще использовать статический табл вью как в этом коде и там значения просто достаются из текстовых полей и присваиваются в соответствующие свойства.

import UIKit

class AddEditEmojiTableViewController: UITableViewController {
    
    // Instance of model
    var emoji: Emoji?
    
    // Outlets
    @IBOutlet weak var symbolTextField: UITextField!
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var descriptionTextField: UITextField!
    @IBOutlet weak var usageTextField: UITextField!
    
    // Outlet from save button
    @IBOutlet weak var saveButton: UIBarButtonItem!
    
    // Function
    func updateSaveButtonState() {
        
        let symbolText = symbolTextField.text ?? ""
        let nameText = nameTextField.text ?? ""
        let descriptionText = descriptionTextField.text ?? ""
        let usageText = usageTextField.text ?? ""
        
        // Check if text fields are empty
        saveButton.isEnabled = !symbolText.isEmpty &&
            !nameText.isEmpty &&
            !descriptionText.isEmpty &&
            !usageText.isEmpty
    }
    
    // Additional check for changing text fields
    // This function connets with all text fields
    @IBAction func textEditingChanged(_ sender: UITextField) {
        updateSaveButtonState()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let emoji = emoji {
            symbolTextField.text = emoji.symbol
            nameTextField.text = emoji.name
            descriptionTextField.text = emoji.description
            usageTextField.text = emoji.usage
        }
        updateSaveButtonState()
    }
    
    // MARK: - Table view data source
    / / static table view
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 4
    }
    
    // MARK: - Navigation
    
    // Create new item and prepare for unwind segue
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        guard segue.identifier == "saveUnwind" else {return}
        
        let symbol = symbolTextField.text ??  ""
        let name = nameTextField.text ?? ""
        let description = descriptionTextField.text ?? ""
        let usage = usageTextField.text ?? ""
        
        emoji = Emoji(symbol: symbol, name: name, description: description, usage: usage)
    }
}

#6

Спасибо за вариант, буду знать)