UITableView Прокручивает автоматически, когда текстовое поле начинает редактировать - PullRequest
0 голосов
/ 20 марта 2019

Я занимаюсь разработкой приложения для iOS, которое имеет различные формы, которые заполняются в UITableview на основе выбора пользователей.Каждая форма имеет разные поля, такие как Textfield, DatePicker, PickerView.Поэтому я использовал один TableViewCell (nib), чтобы хранить все это и показывать или скрывать элементы, основанные на вопросе.Определена функция сохранения, которая будет сохранять значения при входе пользователя в массив.

Моя проблема заключается в том, что время от времени мой просмотр таблицы прокручивается так, как будто индекс выходит из-под контроля.например, когда я выбираю любое текстовое поле, Tableview прокручивается вверх.Я удалил все методы наблюдения за клавиатурой и проверил, что все еще происходит.

Ниже приведен код функции сохранения:

 func saveFormValue(mystr: String) {
    //selectedIndex is a global variable (NSIndexPath)
    let dict = sections[selectedIndex!.section].questions![selectedIndex!.row]
    dict.answer = mystr
    sections[selectedIndex!.section].questions![selectedIndex!.row] = dict
    let answer = updated_answer.init(ID: ID, form_id: selected_form_id, form_name: formName, section_id: dict.section_id ?? "",question_id: dict.question_id ?? "", question_name: dict.question_name!,question_type:dict.question_type!)

    updatedArray.append(answer)
    self.tableView.reloadData()
}

Это код в функции textfieldDidBeginEditing (как инициализируется selectedIndexPath):

 guard let index = tableView.indexPath(for: cell) else {
    return
 }
 selectedIndex = index as NSIndexPath

Я добавил делегата для ячейки, и я заметил одну вещь: эта проблема возникает всякий раз, когда я нажимаю один раз на pickerview или datepicker.Я не мог видеть эту проблему, если я только касаюсь только ячеек textField.

Пожалуйста, дайте мне знать для получения дополнительной информации.

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

В методе делегата текстового поля textFieldDidBeginEditing используйте следующий код:

func textFieldDidBeginEditing(_ textField: UITextField) {
        let indexParh = NSIndexPath(row: textField.tag, section: 0)
        self.constTBL_Bottom.constant = 260
        self.tblViewObj.scrollToRow(at: indexParh as IndexPath, at: .middle, animated: false)
    }

Также вам нужно управлять константой дна таблицы. Когда вы переставляете клавиатуру, установите постоянную таблицы в 0

Надеюсь, это сработает:)

0 голосов
/ 20 марта 2019

Попробуйте этот код, надеюсь, это поможет вам.

 if let thisIndexPath = tableView.indexPath(for: cell) {
    tableView.scrollToRow(at: thisIndexPath, at: .top, animated: false)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...