ios - 在 swift iOS 中从 tableview 中选择时 UIsearchbar 结果出错
问题描述
在我当前的应用程序中,我显示了一个学生列表。我给出了一个复选标记按钮供选择。我可以从表中选择学生,但每当我尝试从搜索栏结果中选择时,它都无法正常工作。
例如,在列表中,我选择了索引 0 和 1 处的对象;每当我尝试搜索某些内容时,索引 0 和 1 处的搜索栏结果对象都会自动被选中。为什么会这样,我该如何解决?
// MARK:- seachbar methods
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){
search_bar.showsCancelButton = true
print("SERACH TEXT ",searchText)
if searchText.isEmpty{
is_searching = false
} else {
print(" search text %@ ",searchText as NSString)
is_searching = true
searchingDataArray.removeAllObjects()
for index in 0 ..< studentsArray.count
{
var localDic :NSDictionary!
localDic = studentsArray.object(at: index) as! NSDictionary
let nameString = localDic["name"] as? NSString
let regString = localDic["reg_no"] as? NSString
if (nameString?.localizedCaseInsensitiveContains(searchText))! || (regString?.localizedCaseInsensitiveContains(searchText))!
{
searchingDataArray.add(localDic)
} else {
print("Not Exists")
}
print(" search text %@ ",searchingDataArray)
self.tutorListView.reloadData()
}
}
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar)
{
is_searching = false
search_bar.text = ""
search_bar.showsCancelButton = false
self.tutorListView.reloadData()
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
is_searching = false
self.tutorListView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SKTutorCell", for: indexPath) as! SKTutorCell
var localDic :NSDictionary!
if is_searching
{
localDic = searchingDataArray.object(at: indexPath.row) as! NSDictionary
}
else
{
localDic = studentsArray.object(at: indexPath.row) as! NSDictionary
}
cell.nameRegdNoLbl.text = localDic?.value(forKey: "name") as? String
cell.checkMarkBtn.tag = indexPath.row
cell.checkMarkBtn.addTarget(self, action: #selector(checkBoxSelection(_:)), for: .touchUpInside)
if ((studentcheckArray[indexPath.row] as AnyObject).isEqual("0")) {
cell.checkMarkBtn.setImage(UIImage(named:"UnCheckIcon"), for: .normal)
}else{
cell.checkMarkBtn.setImage(UIImage(named:"CheckIcon"), for: .normal)
}
cell.seeProfileBtn.tag = indexPath.row
cell.seeProfileBtn.addTarget(self, action: #selector(seeProfilAction(_:)), for: .touchUpInside)
return cell
}
@objc func checkBoxSelection(_ sender:UIButton)
{
let btnTag = sender.tag
print("buttonRow--",btnTag)
if ((studentcheckArray[btnTag] as AnyObject).isEqual("0")) {
studentcheckArray[btnTag] = "1"
}
else {
studentcheckArray[btnTag] = "0"
}
var NewArray = NSMutableArray()
for i in 0..<studentcheckArray.count {
if ((studentcheckArray[i] as AnyObject).isEqual("1")) {
NewArray.add(studentcheckArray[i])
print("NewArray",NewArray)
}
}
if NewArray.count < studentcheckArray.count {
selectAllBtn.setImage(#imageLiteral(resourceName: "UnCheckIcon"), for: .normal)
}
self.tutorListView.reloadData()
}
解决方案
像这样试试
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SKTutorCell", for: indexPath) as! SKTutorCell
var localDic :NSDictionary!
if is_searching
{
localDic = searchingDataArray.object(at: indexPath.row) as! NSDictionary
if ((searchingDataArray[indexPath.row] as AnyObject).isEqual("0")) {
cell.checkMarkBtn.setImage(UIImage(named:"UnCheckIcon"), for: .normal)
}else{
cell.checkMarkBtn.setImage(UIImage(named:"CheckIcon"), for: .normal)
}
}
else
{
localDic = studentsArray.object(at: indexPath.row) as! NSDictionary
if ((studentcheckArray[indexPath.row] as AnyObject).isEqual("0")) {
cell.checkMarkBtn.setImage(UIImage(named:"UnCheckIcon"), for: .normal)
}else{
cell.checkMarkBtn.setImage(UIImage(named:"CheckIcon"), for: .normal)
}
}
cell.nameRegdNoLbl.text = localDic?.value(forKey: "name") as? String
cell.checkMarkBtn.tag = indexPath.row
cell.checkMarkBtn.addTarget(self, action: #selector(checkBoxSelection(_:)), for: .touchUpInside)
cell.seeProfileBtn.tag = indexPath.row
cell.seeProfileBtn.addTarget(self, action: #selector(seeProfilAction(_:)), for: .touchUpInside)
return cell
}
推荐阅读
- angular - Angular HTTP拦截器等待http请求直到获得刷新令牌
- python - Python 和 SQL:从 csv 获取行会导致错误:“INSERT 语句中的列数比 VALUES 子句中指定的值多。”
- java - 如何调试或处理导致 weblogic 服务器中延迟解锁的复制会话数据
- rust - 无法移出 `encoded_packet`,`Fn` 中的捕获变量
- python - 使用 cx_freeze 6.6 构建时,PySide2 不会导入
- react-native - 是否可以在 React Native 中添加 CDN?
- javascript - Vuex 状态未在 vue 文件中更新
- apache-spark - spark-redis 异常:原因:redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
- python - 多处理在单独传递时发送对象的值而不是对象作为参数
- javascript - 跨域请求域到子域