struct TwoTFData { var cStr: String = "" var dStr: String = "" } class AuthTVC: UITableViewCell { let tfC = UITextField() let tfD = UITextField() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) commonInit() } required init?(coder: NSCoder) { super.init(coder: coder) commonInit() } func commonInit() { [tfC, tfD].forEach { v in v.borderStyle = .roundedRect v.backgroundColor = .yellow v.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(v) } let g = contentView.layoutMarginsGuide NSLayoutConstraint.activate([ tfC.topAnchor.constraint(equalTo: g.topAnchor, constant: 0.0), tfC.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 0.0), tfC.bottomAnchor.constraint(equalTo: g.bottomAnchor, constant: 0.0), tfD.topAnchor.constraint(equalTo: g.topAnchor, constant: 0.0), tfD.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: 0.0), tfD.bottomAnchor.constraint(equalTo: g.bottomAnchor, constant: 0.0), tfD.leadingAnchor.constraint(equalTo: tfC.trailingAnchor, constant: 20.0), tfD.widthAnchor.constraint(equalTo: tfC.widthAnchor), ]) } } class TFCrashVC: UIViewController, UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate { let txtfldLoc = UITextField() let txtfldOp = UITextField() let authTableView = UITableView() var myData: [TwoTFData] = [] override func viewDidLoad() { super.viewDidLoad() [txtfldLoc, txtfldOp].forEach { v in v.borderStyle = .roundedRect v.delegate = self v.translatesAutoresizingMaskIntoConstraints = false view.addSubview(v) } txtfldLoc.placeholder = "Location" txtfldOp.placeholder = "Operator" txtfldLoc.backgroundColor = .cyan txtfldOp.backgroundColor = .green authTableView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(authTableView) let g = view.safeAreaLayoutGuide NSLayoutConstraint.activate([ txtfldLoc.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0), txtfldLoc.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 20.0), txtfldOp.topAnchor.constraint(equalTo: g.topAnchor, constant: 20.0), txtfldOp.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -20.0), txtfldOp.leadingAnchor.constraint(equalTo: txtfldLoc.trailingAnchor, constant: 20.0), txtfldOp.widthAnchor.constraint(equalTo: txtfldLoc.widthAnchor), authTableView.topAnchor.constraint(equalTo: txtfldLoc.bottomAnchor, constant: 20.0), authTableView.leadingAnchor.constraint(equalTo: g.leadingAnchor, constant: 20.0), authTableView.trailingAnchor.constraint(equalTo: g.trailingAnchor, constant: -20.0), authTableView.bottomAnchor.constraint(equalTo: g.bottomAnchor, constant: -20.0), ]) authTableView.register(AuthTVC.self, forCellReuseIdentifier: "c") authTableView.dataSource = self authTableView.delegate = self // start with one data element let d: TwoTFData = .init(cStr: "Location 0", dStr: "Operator 0") myData.append(d) } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return myData.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let c = tableView.dequeueReusableCell(withIdentifier: "c", for: indexPath) as! AuthTVC c.tfC.text = myData[indexPath.row].cStr c.tfD.text = myData[indexPath.row].dStr return c } func locationButtonTapped(_ tf: UITextField) { let d: TwoTFData = .init(cStr: "Location \(myData.count)", dStr: "") myData.append(d) authTableView.reloadData() } func operatorButtonTapped(_ tf: UITextField) { let d: TwoTFData = .init(cStr: "", dStr: "Operator \(myData.count)") myData.append(d) authTableView.reloadData() } func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { // textField.layoutIfNeeded() // textField.spellCheckingType = .no // textField.autocorrectionType = .no if textField == txtfldLoc { self.locationButtonTapped(textField) return false } else if textField == txtfldOp { self.operatorButtonTapped(textField) return false } else if textField.superview?.isDescendant(of: self.authTableView) == true { // if textField.accessibilityLabel != nil{ // // let index = Int(textField.accessibilityLabel!)! // // let cell = self.authTableView.cellForRow(at: IndexPath(row: index, section: 0)) as! AuthTVC // self.selectedRow = IndexPath(row: index, section: 0) // if authenticatorObjectList.count > index { // let authenticator = self.authenticatorObjectList[index] // // cell.authenticatorTextField.defaultPlaceholderColor = UIColor(hex: Color.shared.blue)! // cell.authenticatorTextField.placeholderColor = UIColor(hex: Color.shared.blue)! // cell.authenticatorTextField.textColor = .black // // if authenticator.dataType == "List" { // self.authenticatorButtonTapped(sender:textField) // return false // } // else { // if authenticator.regex.first == "^" { // // if let txtfld = self.arrOfViews.first(where:{$0.accessibilityLabel == "\(index)"}) as? MFTextField // // { // // if let ind = self.arrOfViews.firstIndex(of: txtfld) // { // cell.authenticatorTextField.text = txtfld.text // } // } // DispatchQueue.main.async { // self.authTableView.layoutIfNeeded() // } // return true // } // } // } // } // // } else if textField == amountTextField { } return true } }