У меня есть UITableView с пользовательскими ячейками, содержащими два UITextFields для ввода текста.Я бы хотел, чтобы клавиатура оставалась на месте до тех пор, пока ввод текста не будет завершен, но при нажатии второго текстового поля клавиатура исчезает, и мне нужно сделать второе нажатие, чтобы вернуть ее.Я понимаю, что первое нажатие вызвало сообщение «resignFirstResponder», но как я могу сохранить клавиатуру на месте?Попробовал установить tableScrollView keyboardDissmissMode, но это не имеет значения.Я реализую 'textFieldDidEndEditing', чтобы сохранить введенный текст и объявить контроллер представления делегатом texField. Я использую Swift 4 с iOS 12.
Это код для пользовательской ячейки:
класс ChoreoCell: UITableViewCell, UITextFieldDelegate {var inputText: String?
@IBOutlet weak var countText: UITextField! {
didSet {
countText.sizeToFit()
countText.text = inputText
}
}
@IBOutlet weak var stepText: UITextField! {
didSet {
stepText.sizeToFit()
stepText.text = inputText
}
}
}
... и это код, который я использую в tableViewController:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell( withIdentifier:Storyboard.CellIdentifier, for: indexPath) as? ChoreoCell
if (self.choreography.count == 0 ) {
let myCountSteps = CountSteps(counts:"", steps:"" )
for _ in 0...Storyboard.InitialRows-1 {
self.choreography.append(myCountSteps)
}
}
cell!.countText.text = self.choreography[indexPath.row].counts
cell!.stepText.text = self.choreography[indexPath.row].steps
cell!.countText.delegate = self
cell!.stepText.delegate = self
return cell!
}
func textFieldDidEndEditing(_ textField: UITextField) {
guard let txt : String = textField.text else {
print ("input error for text, editing ended but no text received")
return
}
var v:UIView = textField
repeat { v = v.superview!} while !(v is UITableViewCell)
if let cell = v as? ChoreoCell {
guard let ip = self.tableView.indexPath(for: cell) else {
print("Error identifying index path for \(cell)")
return
}
switch (textField) {
case cell.countText:
let myCountSteps = CountSteps(counts:txt, steps:cell.stepText.text! )
self.choreography[ip.row] = myCountSteps
case cell.stepText:
let myCountSteps = CountSteps(counts:cell.countText.text!, steps:txt )
self.choreography[ip.row] = myCountSteps
default:
print ("Unexpected textField case")
}
self.danceDoc?.choreography[ip.row] = self.choreography[ip.row]
self.danceDoc?.updateChangeCount(.done)
return
} else {
print ("Error identifying cell from text entry")
return
}
}
Как я могу определить, какой textField используется для завершения редактирования текущего textField, чтобы я мог назначить ему статус первого респондента и предотвратить исчезновение клавиатуры?