получить текст поля uitext в пользовательских ячейках в виде таблицы - PullRequest
0 голосов
/ 07 апреля 2020

Здесь моя проблема, мне нужно заполнить пользовательские ячейки uitextfields, но я не могу дифференцировать разные ячейки. Однажды я нашел решение, использующее своего рода «режим» для каждой ячейки, но больше не могу его найти.

моя пользовательская ячейка

class RegisterFormCell: UITableViewCell {

    @IBOutlet weak var myInputField: UITextField!
    @IBOutlet weak var myButton: UIButton!

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

    }


}

мой главный контроллер

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var myTable: UITableView!
    @IBOutlet weak var confimButtonOut: UIButton!

    let fields = ["Name", "Email"]

    let name = ""
    let email = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        myTable.delegate = self
        myTable.dataSource = self

    }


    @objc func actionForButtonInsideCell() {
        print("tapped")
    }

    @IBAction func confirmButtonTapped(_ sender: Any) {

        //verify validation for data

        if name != "" && email.isValidEmail() {
            print("all is ok, perform segue")
        } else {
            print("some error")
        }



    }

}


extension ViewController: UITableViewDelegate, UITableViewDataSource {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return fields.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = myTable.dequeueReusableCell(withIdentifier: "RegisterFormCell-id", for: indexPath) as! RegisterFormCell
        cell.myInputField.placeholder = fields[indexPath.row]
        cell.myInputField.delegate = self
        cell.myButton.addTarget(self, action: #selector(actionForButtonInsideCell), for: .touchUpInside)

//        switch indexPath.row {
//        case 0:
//            break
//        default:
//            cell.myButton.isHidden = true
//        }

        return cell
    }


    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "test title"
    }

}



extension ViewController: UITextFieldDelegate {

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        print("final is: \(textField.text ?? "error")")
        return true
    }

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        guard textField.text != "", textField.text != nil else { return true}

        //here should be assigned the value to the variables

        print(textField.text!)
        return true
    }

}


extension String {
    func isValidEmail() -> Bool {
        // here, `try!` will always succeed because the pattern is valid
        let regex = try! NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", options: .caseInsensitive)
        return regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
    }
}

1 Ответ

0 голосов
/ 07 апреля 2020

Вы должны реализовать UITextfield делегат внутри RegisterFormCell класса, а не ViewController, и, таким образом, вы будете иметь индивидуальный контроль над текстовыми полями, соответствующими каждой ячейке.

...