Табличное представление не рендерится правильно, когда я уменьшаю его, и это прокручивается - PullRequest
0 голосов
/ 17 марта 2019

Я работаю с табличным представлением в Xcode, которое содержит таможенные ячейки с элементом текстового поля в них.Если моя таблица развернута до места, где прокрутка не требуется, она работает отлично, но я пытаюсь сделать так, чтобы моя таблица прокручивалась до следующей ячейки вниз, когда пользователь нажимает клавишу возврата, чтобы она могла быть меньше.

Прокрутка вниз на возвращаемой части на самом деле работает нормально, проблема в том, что в зависимости от того, насколько маленький я делаю табличное представление, он заменит переменное число ячеек под элементом textField.text пользовательским вводом, которыйбыл добавлен в предыдущую ячейку.Я понятия не имею, почему это происходит.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
    cell.id = indexPath.item
    cell.tag = indexPath.item
    cell.n.tag = indexPath.item

    return cell
}

image

Ответы [ 2 ]

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

Я смог придумать ответ, основанный на ваших ответах, так что большое спасибо, и вот он.

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->          UITableViewCell {
        print("Text field cell for row at")
        let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell

        if firstTable < numP{
            cell.n.text = nil
            cell.firstTime=true
            cell.n.tag = indexPath.row
            return cell
        }
        else{
            cell.n.text = names[indexPath.row]
            cell.n.tag = indexPath.row
            return cell
        }
        }

В моем коде переменная "firstTable" увеличивается (в другой функции) каждый раз, когда пользовательский ввод добавляется, пока не достигнет общего количества вводимых данных (на основе ввода предыдущих представлений). Внутри «if» используются пустые ячейки с текстовым значением, сброшенным на nil для сбора ввода пользователя, но как только firstTable> # должен находиться в массиве, раздел «else» используется для визуализации таблицы с использованием элементов из массива. пользовательского ввода для заполнения ячеек.

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

Нет сброса значений textField в вашей текущей реализации cellForRowAt.Когда пользователь вводит текст в одну из ячеек, он остается там, и поскольку ячейки продолжают использоваться повторно, создается впечатление, что текст просто появляется в случайном порядке.

Введенные пользователем значения должны где-то храниться.Например, есть словарь var userInput = [Int: String]().Добавьте UITextFieldDelegate протокол к вашему контроллеру и выполните следующее:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let newText = (textField.text as? NSString)?.replacingCharacters(in: range, with: string)
    userInput[textField.tag] = newText // store entered text

    return true
}

Затем просто обновите cellForRowAt этим:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:MyCustomCell = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! MyCustomCell
    cell.id = indexPath.item
    cell.tag = indexPath.item
    cell.n.tag = indexPath.item

    // update cell's textfield text
    cell.textField.delegate = self
    cell.textField.tag = indexPath.item
    cell.textField.text = userInput[indexPath.item]

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