UITableView 在文本字段开始编辑时自动滚动

Posted

技术标签:

【中文标题】UITableView 在文本字段开始编辑时自动滚动【英文标题】:UITableView Scrolls automatically while textfield begins editing 【发布时间】:2019-03-20 10:19:56 【问题描述】:

我正在开发一个 ios 应用程序,它具有不同的表单,根据用户选择填充到 UITableview 中。每个表单都有不同的字段,例如 Textfield、DatePicker、PickerView。所以我使用一个 TableViewCell (nib) 来保存所有这些并根据问题显示或隐藏项目。 定义了保存函数,当用户输入数组时将保存值。

我的问题是,有时我的 tableview 滚动,好像索引失控了。就像当我选择任何文本字段时,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 单元格,我看不到这个问题。

请让我知道任何进一步的细节。

【问题讨论】:

您是否正确管理键盘处理?键盘出现后您的文本字段可见吗? @gauravbajaj 我添加了键盘观察器功能并检查,它工作正常。这个问题有时会发生。例如:在我的表格视图中,我有 30 个问题。我向下滚动到第 20 个问题并按下该单元格的文本字段,此时键盘出现,但 tableview 滚动到其他单元格的顶部。 分享你的键盘观察功能。 【参考方案1】:

试试这个代码,希望对你有帮助。

 if let thisIndexPath = tableView.indexPath(for: cell) 
    tableView.scrollToRow(at: thisIndexPath, at: .top, animated: false)
 

【讨论】:

【参考方案2】:

在文本字段委托方法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

希望这会奏效:)

【讨论】:

以上是关于UITableView 在文本字段开始编辑时自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

C# winform中richTextBox中自动滚至底部

UITableView 单元格不使用标签文本自动调整大小

具有多行输入字段的 UITableViewCell?

在 UITableView 上 reloadData 后文本字段没有被选中

在线编辑文本字段时,UITableViewController 不会自动调整其表格视图的大小和位置

将 managedobject 从 uitableview 传递到文本字段以在核心数据模型中进行编辑