Фильтр не работает для панели поиска UITextField в tableView Swift - PullRequest
0 голосов
/ 29 января 2020

Я реализовал панель поиска (UITextField) для tableView и определил тот же массив SectionList, но не знаю, фильтрация не работает. когда я пытаюсь напечатать IndexData, у него есть данные, но tableFilterData пусто.

Это основная строка, которая показывает пустой. tableFilterdata = IndexData.filter({$0.names.contains(searchText) })

var IndexData = [SectionList]()`

var tableFilterdata = [SectionList]()`

var isSearch : Bool! = false`


struct SectionList {
        let letter : String
        let names : [String]
    }

Основные функции

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
       searchTxt.resignFirstResponder()
       return true
    }

public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{

        let searchText  = searchTxt.text! + string

        print(IndexData)

        tableFilterdata =  IndexData.filter({$0.names.contains(searchText) })

        print(tableFilterdata)
        if(tableFilterdata.count == 0){
           isSearch = false
         }else{
           isSearch = true
        }


        tableView.reloadData()
        return true
    }

1 Ответ

0 голосов
/ 29 января 2020

Заменить,

let searchText  = searchTxt.text! + string

        print(IndexData)

        tableFilterdata =  IndexData.filter({$0.names.contains(searchText.lowercased()) })

на

if string.isEmpty {
    searchText = String(searchText.dropLast())
}
else {
    searchText = textField.text!+string
}

print(IndexData)

self.IndexData.removeAll()
self.tableFilterdata.removeAll()
if searchText.count == 0 {
    self.tableFilterdata = self.IndexData
} else {
    tableFilterdata =  IndexData.filter{ ($0.names.contains(searchText)) }
}
...