swift - 表头内的 Swift UITextField
问题描述
我有一个包含 UITextField 的标题的集合视图(基本上它是一个搜索)。我想在编辑此字段时更新 collectionview 数据。主要问题是调用collectionView.reloadData() 后键盘被关闭。所以我每次重新加载只能输入一个一个字符。我试过用 reloadItems() 替换 reloadData() 但它没有帮助。我怎样才能避免这种情况?我知道我可以在 collectionView 中放置一个搜索字段,但这对我来说不是一个正确的解决方案。(您可以查看 Instagram 搜索关注者)
我做了什么:
searchField.addTarget(self, action: #selector(textFieldChanged), for: .editingChanged)
然后将此数据传递给我的 RestAPI 服务器:
@objc func textFieldChanged(_ textField: UITextField) {
guard let searchQuery = textField.text else { return }
if !searchQuery.isEmpty {
APIService.sharedInstance.searchSubscribers(userId: user.id, token: User.sharedInstance.token, type: segment.selectIndex == 0 ? .followers : .following, query: searchQuery) { (fetchedUsers) in
DispatchQueue.main.async {
self.subcribersList = fetchedUsers
self.collectionView.reloadData()
}
}
} else {
fetchList(listType: segment.selectIndex == 0 ? .followers : .following, scrollAnimation: false)
}
}
解决方案
不是确切的解决方案,但作为一个没有故事板的粉丝,我会将文本字段添加为 collectionView 的子视图。并将collectionview插入到顶部作为搜索栏的高度。而不是把它放在标题上。
推荐阅读
- google-app-engine - 使用 Google Cloud Build 部署到 Google App Engine 时未正确安装依赖项 (requirements.txt)
- javascript - 在 axios 中使用程序化导航(Vue)
- git - 如何将一个文件从 git repo 链接到另一个 repo
- excel - 运行时错误 1004 您不能在此处粘贴
- c# - SQL 查询连接 4 个表并从 3 个不同的表中获取 3 列的总和,并将结果显示到 asp.net mvc 视图中
- haskell - 如何使用“BinaryString.uncons()”但类型与 Word8 不同?
- python-3.x - 在运行时更改模型的根路径 - PyQt5
- java - Firebase NullPointerException 错误,虽然有用户 ID
- github - 为什么我尝试在 Git Hubs 平台上发布网站时在 Github 上得到 404
- java - Java 对象 - 如何动态创建对象