Ios 更新UITableView页脚时,不会将焦点丢失到节中的文本字段

Ios 更新UITableView页脚时,不会将焦点丢失到节中的文本字段,ios,swift,uitableview,footer,reload,Ios,Swift,Uitableview,Footer,Reload,我有一个应用程序的注册用户屏幕,该应用程序使用UITableView创建必填字段列表。每个部分的页眉、文本字段和页脚中都有一个内容(即“用户名”、“电子邮件”等),用于显示与该字段相关的消息,例如“用户名太短”。我发现有两种不同的方法可以动态更新此文本。第一种方法是在用户键入这些文本字段时创建一个操作,我调用以下代码: UIView.setAnimationsEnabled(false) self.tableView.beginUpdates() if let containerView

我有一个应用程序的注册用户屏幕,该应用程序使用
UITableView
创建必填字段列表。每个部分的页眉、文本字段和页脚中都有一个内容(即“用户名”、“电子邮件”等),用于显示与该字段相关的消息,例如“用户名太短”。我发现有两种不同的方法可以动态更新此文本。第一种方法是在用户键入这些文本字段时创建一个操作,我调用以下代码:

 UIView.setAnimationsEnabled(false)
 self.tableView.beginUpdates()

 if let containerView = tableView.footerView(forSection: section) {            
    containerView.textLabel!.textColor = UIColor.red
    containerView.textLabel!.text = "Username too short"
        containerView.textLabel!.font = UIFont(name: containerView.textLabel!.font.fontName, size: 12)
    containerView.sizeToFit()

}

self.tableView.endUpdates()
UIView.setAnimationsEnabled(true)
这是可行的,当我在文本框中键入时更新页脚(根据需要更新文本和消息)。然而,当我向下滚动,例如用户名部分卸载时,当我向上滚动时,“用户名太短”文本消失。当我再次在文本字段中键入时,它会重新出现。我也遇到过这样的问题:当部分没有呈现时(如预期的那样)更新它。因此,我尝试以以下方式重写
tableView(\utableview:UITableView,viewforfooterInstitution节:Int)->UIView?
方法:

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

    let view = UIView(frame: CGRect(x: 8, y: 0, width: 100, height: 40))
    let label = UILabel(frame: view.frame)
    label.text = "Username too short"
    label.sizeToFit()
    view.addSubview(label)
    view.frame = CGRect(x: 8, y: 0, width: 100, height: 20)

    return view

}
再次适当地更新文本,不调用前面的代码。这意味着每次用户输入字符时,我都必须调用
tableView.reloadData()
。这也有效,但它导致应用程序停止让用户输入文本字段。他们必须再次点击它,在每个字符之后开始打字。我尝试了无数种方法来合并这两个方法,试图在
tableView
中调用前一个代码,但是我发现每当我返回一个自定义视图
tableView.footerView(forSection:)
将返回
nil
,如果我调用
tableView
方法本身,我将有无限的递归。我还尝试了许多方法,试图只重新加载页脚(从而不会丢失文本视图焦点),但它们似乎都不起作用

如何更新页脚、卸载节时保持页脚不变(作为扩展,可以在节未加载时更新页脚),以及不丢失文本字段的焦点?

我提前道歉,因为我对应用程序开发有点陌生。对于某些上下文,我有一个静态表,我指的是每个部分的页眉和页脚,而不是表的页脚