Получение всего значения textField из tableView в Array and Validation - PullRequest
0 голосов
/ 20 мая 2019

У меня есть два tableView с похожим дизайном ячейки.внутри ячейки есть два textField с именем и возрастом.Вы можете видеть на изображении. enter image description here

Теперь пользователь заполняет данные в каждом текстовом поле.затем на кнопку continue я хочу добавить все имя в массиве.Аналогично для Age.

А также хочу поставить проверку для пустого значения.Если какое-либо текстовое поле не заполнено, при нажатии кнопки Continue появляется всплывающее окно.

Ответы [ 3 ]

0 голосов
/ 20 мая 2019

Необходимо реализовать UITextFieldDelegate в ViewController и реализовать метод TextFieldEndEditing и сохранить текст отредактированного текстового поля в массиве строк.

Пожалуйста, обратитесь к ссылке ниже, чтобы получить все значения текстового поля.

https://phrkrish.wordpress.com/2016/12/25/table-view-with-text-field-in-swift-3-0/

0 голосов
/ 20 мая 2019

Вместо использования двух табличных представлений используйте одно табличное представление с двумя разделами.И не используйте dequeueReusableCell.Создайте два массива ваших объектов UITableViewCell.И получить значение текстового поля из объектов массива в действии кнопки продолжения.

// CustomCell.swift

class CustomCell: UITableViewCell {
    let titleLbl = UILabel()
    let seatNoLbl = UILabel()
    let nameTxtField = UITextField()
    let ageTxtField = UITextField()
    //etc
}

// ViewController.swift

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    let tableView = UITableView()
    var onwardSeatNos = ["L1","L15"]
    var returnSeatNos = ["L2","L3"]
    var onwardSeatCells = [CustomCell]()
    var returnSeatCells = [CustomCell]()
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        onwardSeatNos.enumerated().forEach { (index,seatNo) in
            let cell = CustomCell()
            print(index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index))
            cell.titleLbl.text = index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)
            cell.seatNoLbl.text = "Seat No. \(seatNo)"
            onwardSeatCells.append(cell)
        }
        returnSeatNos.enumerated().forEach { (index,seatNo) in
            let cell = CustomCell()
            cell.titleLbl.text = index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)
            cell.seatNoLbl.text = "Seat No. \(seatNo)"
            returnSeatCells.append(cell)
        }
    }
    func numberOfSections(in tableView: UITableView) -> Int {
        return returnSeatNos.isEmpty ? 1 : 2
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return onwardSeatNos.count
        } else {
            return returnSeatNos.count
        }
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            return onwardSeatCells[indexPath.row]
        } else {
            return returnSeatCells[indexPath.row]
        }
    }
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 0 {
            return "Passenger Information (Onward)"
        } else {
            return "Passenger Information (Return)"
        }
    }
    @objc func confirmBtnAction(_ sender: UIButton) {
        if let index = onwardSeatCells.firstIndex(where: { $0.nameTxtField.text!.isEmpty }) {
            print("Onward " + (index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)) + " name is empty")
        } else if let index = onwardSeatCells.firstIndex(where: { $0.nameTxtField.text!.isEmpty }) {
            print("Onward " + (index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)) + " age is empty")
        } else if let index = returnSeatCells.firstIndex(where: { $0.nameTxtField.text!.isEmpty }) {
            print("Return " + (index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)) + " name is empty")
        } else if let index = returnSeatCells.firstIndex(where: { $0.nameTxtField.text!.isEmpty }) {
            print("Return " + (index == 0 ? "Primary Passenger" : String(format: "Co-passenger %02d", index)) + " age is empty")
        } else {
            let onwardNamesArr = onwardSeatCells.map { $0.nameTxtField.text! }
            let onwardAgesArr = onwardSeatCells.map { $0.ageTxtField.text! }
            let returnNamesArr = returnSeatCells.map { $0.nameTxtField.text! }
            let returnAgesArr = returnSeatCells.map { $0.ageTxtField.text! }
        }
    }
}
0 голосов
/ 20 мая 2019

Вы можете получить ячейку таблицы, используя метод cellForRow (at:) , а затем получить доступ к метке имени или метке возраста соответственно, как показано ниже,

let indexPath = IndexPath(row: 0, section: 0)
if let cell = yourTableView.cellForRow(at: indexPath) as? yourTableViewCell {
    let name = cell.nameLabel.text
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...