搜索栏在 iOS 中无法正常工作 [关闭]

Posted

技术标签:

【中文标题】搜索栏在 iOS 中无法正常工作 [关闭]【英文标题】:Searchbar doesn't work properly in iOS [closed] 【发布时间】:2016-10-08 18:46:27 【问题描述】:

目前我正在我的项目中创建搜索功能,但它无法正常工作。目前,当我在 UISearchbar 中输入某些内容时,它确实会从搜索结果中改变,但它没有显示正确的搜索结果。这是因为数据中的单词之间有空格吗?因为当我使用单个单词时,它确实很完美。

数组和虚拟数据:

var exercises = [exercise]()
    var filteredExercises = [exercise]()

// SOME DUMMY DATA FOR THE TABLEVIEW
        let exercise1 = exercise(exerciseName: "Incline Bench Press")
        let exercise2 = exercise(exerciseName: "Decline Bench Press")
        let exercise3 = exercise(exerciseName: "Bench Press")

        exercises.append(exercise1)
        exercises.append(exercise2)
        exercises.append(exercise3)

搜索栏功能:

// ***************** SEARCHBAR FUNCTIONS ************** //
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 

        if searchBar.text == nil || searchBar.text == "" 

            inSearchMode = false
            tableView.reloadData()

        else

            inSearchMode = true
            let lower = searchBar.text!.lowercased()


            // each exercise in array is $0 and we taking the name value and the range of the inserted text is that contained in the name
            filteredExercises = exercises.filter($0.exerciseName.range(of: lower) != nil)
            tableView.reloadData()
        
    

显示在单元格中:

// ***************** TABLE DELEGATE FUNCTIONS ******************* //

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        if let cell = tableView.dequeueReusableCell(withIdentifier: "exerciseCell", for: indexPath) as? exerciseCell 

//            let exercise = exercises[indexPath.row]

            let exer: exercise!

            if inSearchMode 

                print(filteredExercises)
                exer = filteredExercises[indexPath.row]
                cell.updateUI(exercise: exer)
            else

                exer = exercises[indexPath.row]
                cell.updateUI(exercise: exer)
            

//            cell.updateUI(exercise: exercise)
            return cell
        else
            return UITableViewCell()
        

希望有人看到问题。

【问题讨论】:

【参考方案1】:

问题是你在说:

let lower = searchBar.text!.lowercased()

但是exercises 元素都是标题格式的:

let exercise1 = exercise(exerciseName: "Incline Bench Press")
let exercise2 = exercise(exerciseName: "Decline Bench Press")
let exercise3 = exercise(exerciseName: "Bench Press")

...所以lower 永远无法匹配exercises 中的任何内容。

【讨论】:

omg...我现在感觉很傻......我真傻哈哈 当我选择一行时,它会变成蓝色,我可以选择多行,但是当我在搜索并选择并返回时,它不会保存选定的行。我是否必须创建一个新的 var 才能在搜索模式下存储选定的行?/【参考方案2】:

您比较降低和未降低的字符串。改为

filteredExercises = exercises.filter($0.exerciseName.lowercased().range(of: lower) != nil)

【讨论】:

以上是关于搜索栏在 iOS 中无法正常工作 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

网站菜单栏在移动浏览器中正常工作时无法与 WebView android 一起使用

Bootstrap 导航栏在移动设备上无法正常工作

数组中的二进制搜索无法正常工作[关闭]

iOS 试飞无法正常工作? [关闭]

IQKeyBoaredManager 在 IOS 11 中无法正常工作

iOS 6/iPhone 5 上的 UIGlassButton 无法正常工作 [关闭]