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
方法本身,我将有无限的递归。我还尝试了许多方法,试图只重新加载页脚(从而不会丢失文本视图焦点),但它们似乎都不起作用
如何更新页脚、卸载节时保持页脚不变(作为扩展,可以在节未加载时更新页脚),以及不丢失文本字段的焦点?
我提前道歉,因为我对应用程序开发有点陌生。对于某些上下文,我有一个静态表,我指的是每个部分的页眉和页脚,而不是表的页脚