【发布时间】:2021-10-20 17:54:02
【问题描述】:
我有自定义类,继承自 UISearchBar 并带有下拉表格视图,并且两个委托都与该类相关。
我注意到,UISearchBarDelegate 方法在 UITableViewDelegate 之前调用,但为了我的目标,我需要更改它。是否有可能以任何方式管理它们,或结合起来?
例如,如果用户在 searchField 之外点击,didEndEditing 方法将被触发,键盘将被隐藏,所以我也想隐藏我的tableView(它提供搜索建议),但有一种情况:当点击tableView 行时,它也会在didSelectRow 之前触发didEndEditing,而didSelectRow 将永远不会被调用,因为tableView 是隐藏的,实际上没有单元格。
如果我要从 didEndEditing 中删除关闭的 tableview,当用户点击其他地方时,我无法关闭它。
因此,如果可以先处理tableView 方法,那将对我有很大帮助。也许,可以为他们使用一些通用协议..
private func closeTableView() {
var frame = self.tableView.frame
frame.size.height = 0
self.tableView.frame = frame
self.tableView.sizeToFit()
}
...
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("didSelectRowAt")
...
self.closeTableView()
}
extension CustomSearchBar: UISearchBarDelegate {
...
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
print("searchBarTextDidEndEditing")
self.setShowsCancelButton(false, animated: true)
self.closeTableView()
}
}
当点击表格行时,控制台中只有:
searchBarTextDidEndEditing
【问题讨论】:
标签: ios swift uitableview uisearchbardelegate