Reputation: 5
In my current application, I show a list of students. I give a check mark button for selection. I am able to select students from the table, but whenever I try to select from search bar results, it's not working correctly.
For example, in the list I selected the object at index 0 and 1; whenever I try to search something, the search bar results object at index 0 and 1 gets selected automatically. Why is that, and how can I fix it?
// 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()
}
Upvotes: 0
Views: 85
Reputation: 359
Try like this
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
}
Upvotes: 1