如何在UITableView中通过单个按钮实现国家名称数组的多次筛选?
问题根因
你当前的submit筛选逻辑是基于上一次筛选后的结果数组countriesF做二次过滤,第一次筛选后countriesF已经是全量国家数组的子集,第二次筛选时如果输入的关键词不在这个子集范围内,就会得到空数组,最终表现为tableView空白。
修复方案
你已经在countries数组中存储了全量原始国家数据,每次筛选直接基于全量数组做过滤即可,不需要额外加重载按钮也不需要重复请求接口。仅需要修改submit方法的过滤数据源:
func submit(for filter: String){ // 每次都从全量的原始国家数组中过滤,不是从上一次的筛选结果过滤 countriesF = countries.filter{ $0.name.contains(filter) } tableView.reloadData() }
如果你需要优化体验,可以补充空关键词展示全量、忽略大小写匹配的逻辑:
func submit(for filter: String){ if filter.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { // 输入为空时展示全量国家 countriesF = countries } else { // 忽略大小写匹配,输入小写也能匹配到大写开头的国家名 countriesF = countries.filter{ $0.name.localizedCaseInsensitiveContains(filter) } } tableView.reloadData() }
内容的提问来源于stack exchange,提问作者PowerPlay
相关产品推荐
相关产品推荐

