【问题标题】:Swift UITextField inside table header表头内的 Swift UITextField
【发布时间】:2020-06-10 20:03:18
【问题描述】:

我有一个包含 UITextField 的标题的 collectionview(基本上是搜索)。我想在编辑此字段时更新 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)
    }
}

【问题讨论】:

    标签: swift uitableview uicollectionview uitextfield


    【解决方案1】:

    好的,通过将我的搜索文本字段设置为 willDisplaySupplementaryView 中的第一响应者来修复

       func collectionView(_ collectionView: UICollectionView, willDisplaySupplementaryView view: UICollectionReusableView, forElementKind elementKind: String, at indexPath: IndexPath) {
            let view = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "headerView", for: indexPath) as! SubscribersSearchHeader
            if let searchQuery = view.searchField.text {
                if searchQuery.count > 0 {
                    view.searchField.becomeFirstResponder()
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      不是确切的解决方案,但作为一个没有故事板的粉丝,我会将文本字段添加为 collectionView 的子视图。并将collectionview插入顶部作为搜索栏的高度。而不是把它放在标题上。

      【讨论】:

      • 不错的解决方案。但是如果我将 textField topConstraint 设置为 collectionView.topConstraint - height searchBar 它会在焦点后自动将 textField 放到默认位置
      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 2015-10-08
      • 2021-04-15
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多