Управление клавиатурой при вводе текста в ячейки UITableView, содержащие поля UITextFields - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть 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, чтобы я мог назначить ему статус первого респондента и предотвратить исчезновение клавиатуры?

1 Ответ

0 голосов
/ 09 декабря 2018

Возможно, у вас есть код, похожий на этот, который приведет к отключению клавиатуры, несмотря ни на что:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()            
    return true
}

Чтобы исправить это - вам нужно программно активировать следующее текстовое поле:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()       
    self.nextTextField.becomeFirstResponder() // Add this line
    return true
}

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

Не уверен на 100%, не повлияет ли это на другие функции, но я считаю, что даже textField.resignFirstResponder() Строка может быть опущена (если мы хотим, чтобы клавиатура оставалась на экране), в противном случае это может вызвать некоторую странную анимацию клавиатуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...