【发布时间】:2020-01-18 05:08:59
【问题描述】:
这里的情况很奇怪,希望有人能帮忙。基本上,我有一个这样的开关:
private var searchMode = false {
didSet {
if !searchMode {
self.tableView.endEditing(true)
}
tableView.reloadData()
}
}
当我按下按钮时它会被切换:
@objc func searchTapped() {
searchMode.toggle()
}
我的标题是这样设置的:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if searchMode {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "searchHeader") as! SearchTableViewHeader
header.searchField.becomeFirstResponder()
header.searchField.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)
return header
} else {
let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "blueHeader") as! OpaqueBlueTableViewHeader
header.titleLabel.text = "Discover Innovative Services"
header.subtitleLabel.text = "Learn about our comprehensive range of services"
return header
}
}
到目前为止一切顺利。现在事情就是这样。我第一次单击按钮时,searchMode 变为 true,并且我的 UITextfield 出现,它是正确的第一响应者。到现在为止还挺好。然后当我再次单击它时,文本字段消失了。到现在为止还挺好。但是,当我再次单击它时,textField 会正确显示,但它的响应者太长了!让我告诉你这个问题。
在 gif 中令人困惑,但我第一次点击它时,它是第一响应者,然后又不是。有谁知道我怎样才能让它恢复成为第一响应者?
【问题讨论】:
-
我试过这种方法。它让我辞职响应者罚款,但它不会恢复第一响应者.. :(
标签: swift uitableview resignfirstresponder becomefirstresponder