如何使用 UISearchBar 搜索文本和图片

how to use UISearchBar to search text and images

imageData = [UIImage (named: "Burger Point")!,
                 UIImage (named: "Eating Point")!,
                 UIImage (named: "Food Garage")!,
                 UIImage (named: "Food Masters")!,
                 UIImage (named: "Food Plaza")!,
                 UIImage (named: "Masala Junction 71")!,
                 UIImage (named: "Samosa Express")!,
                 UIImage (named: "Transform Diet")!,
                 UIImage (named: "Urban Pind")!]

这是我的图像数组,名称数组与图像数组相同。现在我想将过滤后的图像存储到 filterImages 数组,但我不知道如何完成它 我在 searchBar 委托中做了一些事情,但它给我错误

// SearchBar Text and Image filtering
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchBar.text == nil || searchBar.text == "" {
        isSearching = false
        view.endEditing(true)
        searchTableView.reloadData()
    }
    else {
        isSearching = true

          filteredData =  receivedData.filter({ (text) -> Bool in
            let tmp: NSString = text as NSString
            let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
                return range.location != NSNotFound
          })
        filteredImage = imageData.filter({ (text) -> Bool in
            let tmp : UIImage = text as NSString
            let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
            return range.location != NSNotFound
        })
        searchTableView.reloadData()
    }
}

根据你的问题,我了解到你的资产中有类似于图像的字符串数据,当用户搜索开始时需要将搜索结果映射到图像

这里是解决方案

let receivedData = ["Burger Point","Eating Point","Food Garage","Food Masters","Food Plaza"]
    let searchText = "Bur"
    let filteredImage = receivedData.filter {[=10=].lowercased().contains(searchText.lowercased())}.map { UIImage.init(named: [=10=])}
    print(filteredImage.count)

应用到您的搜索功能

   // SearchBar Text and Image filtering
        func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

            if !searchBar.text.isEmpty{
                let filteredImage = receivedData.filter {[=11=].lowercased().contains(searchText.lowercased())}.map { UIImage.init(named: [=11=])}
     isSearching = !filteredImage.isEmpty
    searchTableView.reloadData()
            }
        }