Здравствуйте. У меня есть кастомная ячейка, в которой располагается label и textfield. Есть массив information = [“Имя”,“Фамилия”, “Отчество”,“Дата Рождения”, “Пол”], который передаётся в label, и другой массив с данными, которые вводятся с БД. Все поля, кроме “Отчества” являются обязательными. Нашла ранее созданную тему (Получить индекс ячейки при нажатии кнопки) для получения индекса. Хотела проверять через него, но не получается, выбивает ошибку. И в дальнейшем как к индексу обращаться. Спасибо!
http://screenshot.ru/upload/images/2017/11/28/EKRANA2017-11-28V18.43.12eba6e.png
Индекс textField внутри TableView
Silea
#1
haymob
#2
class TableViewController: UITableViewController, UITextFieldDelegate {
private typealias Field = (
label: String,
text: String?
)
private var fields = [
Field("Имя", nil),
Field("Фамилия", nil),
Field("Отчество", nil),
Field("Дата Рождения", nil),
Field("Пол", nil)
]
override func viewDidLoad() {
super.viewDidLoad()
loadData()
}
private func loadData() {
for index in fields.startIndex..<fields.endIndex {
switch fields[index].label {
case "Имя":
fields[index].text = "Иван"
case "Фамилия":
fields[index].text = "Иванов"
case "Отчество":
fields[index].text = "Иванович"
case "Дата Рождения":
fields[index].text = "11.11.1901"
case "Пол":
fields[index].text = "Обычный"
default: break
}
}
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fields.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
let field = fields[indexPath.row]
cell.label.text = field.label
cell.textField.text = field.text
cell.textField.delegate = self
return cell
}
// MARK: - TextFieldDelegate
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
if let cell = textField.superview?.superview as? UITableViewCell,
let index = tableView.indexPath(for: cell)?.row {
fields[index].text = textField.text
}
return true
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
view.endEditing(true)
return true
}
@IBAction func save() {
view.endEditing(true)
for field in fields {
switch field.label {
case "Имя":
print("Имя: \(field.text)")
case "Фамилия":
print("Фамилия: \(field.text)")
case "Отчество":
print("Отчество: \(field.text)")
case "Дата Рождения":
print("Дата Рождения: \(field.text)")
case "Пол":
print("Пол: \(field.text)")
default: break
}
}
}
}