缩小表格尺寸并滚动时,表格视图无法正确呈现

时间:2019-03-17 01:10:22

标签: ios uitableview

我正在使用Xcode中的表格视图,其中包含海关单元格和其中的textfield元素。如果将我的表扩展到不需要滚动的位置,那么它可以正常工作,但是我试图让用户单击return时将表向下滚动到下一个单元格,以便使其更小。

在返回部分上向下滚动实际上可以正常工作,问题在于,根据我将表格视图缩小的多少,它将用添加到其中的用户输入替换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 :(得分:0)

当前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
}

答案 1 :(得分:0)

我能够根据您的答案提出一个答案,非常感谢,就在这里。

    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”部分将使用数组中的元素来呈现表用户输入以填充单元格。