搜索栏不搜索在搜索字段中输入的词

问题描述

我的搜索栏有问题,当我加载应用程序时,Json 数据会正确加载到表格视图中,但是如果我在搜索字段中输入一个词,则没有任何反应,数据不会被搜索,表格视图仍然存在一样。

视图控制器

import UIKit


class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    

    var popularMoviesArray = [Results]()

    var swiftManager = SwiftManager()

    var tableViewCell = TableViewCell()

    @IBOutlet weak var tableView: UITableView!
    
    // START SEARCHBAR
    
    @IBOutlet weak var searchBar: UISearchBar!
    @IBOutlet weak var labelError: UILabel!
    
    var filteredMoviesArray = [Results]() {

        didSet {
            dispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
        
    }
    
    // END SEARCHBAR
    
   override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        swiftManager.delegate = self
    
    // START SEARCHBAR
    
    searchBar.delegate = self
    searchBar.placeholder = "Search here..."
    
    // END SEARCHBAR
    
    swiftManager.fetchUrl()
        
    }
    
    // START SEARCHBAR
    
    func rowOk() {
        labelError.backgroundColor = UIColor.white
        labelError.text = ""
    }
    func rowError() {
        labelError.textColor = UIColor.white
        labelError.backgroundColor = UIColor.red
        labelError.textAlignment = .center
        labelError.text = "no records found"
    }
    
    // END SEARCHBAR

    
    // MARK: - TableView Datasource Methods

    func numberOfSections(in tableView: UITableView) -> Int {
        
        return 1
        
    }

    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        
        // START SEARCHBAR

        if filteredMoviesArray.count != 0 {
            rowOk()
            print("OK - \(filteredMoviesArray.count)")
            return filteredMoviesArray.count
        } else {
            rowError()
            print("ERROR - \(filteredMoviesArray.count)")
            return filteredMoviesArray.count
        }
        
        // END SEARCHBAR
        
    }
    
    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath) as! TableViewCell
        
        let item = filteredMoviesArray[indexPath.row]
        
        cell.labelTitle.text = item.title
        cell.labelYear.text = labelYearFormatter
        cell.labelRate.text = String(item.Vote_average ?? 0.0)
        cell.labelOreview.text = item.overview
        
        return cell
        
    }
    
    // MARK: - TableView Delegate Methods
    
    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
        
        performSegue(withIdentifier: "goToDetail",sender: indexPath.row)
        
    }
    
    override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
        
        guard segue.identifier != nil else {
            return
        }
        
        let letRow = sender as? Int
        
        switch segue.identifier {

        case "goToDetail":

        (segue.destination as! ViewControllerDetail).itemDetail = filteredMoviesArray[letRow!]
        
        default:

            return
        }
        
        
    }



}

扩展 SwiftManagerDelegate

//MARK: - SwiftManagerDelegate

 extension ViewController: SwiftManagerDelegate {
    
   func didUpdateStruct(_ swiftManager: SwiftManager,swiftData: SwiftData) {
        
       dispatchQueue.main.async {
            
            self.filteredMoviesArray = swiftData.results
            
            self.tableView.reloadData()
            
        }
        
    }
    
    
    func didFailWithError(error: Error) {
        print(error)
    }
    
}

扩展 UISearchBarDelegate

//MARK: - UISearchBarDelegate

 // START SEARCHBAR

 extension ViewController: UISearchBarDelegate {
    
    func searchBar(_ searchBar: UISearchBar,textDidChange searchText: String) {
        
        guard
            let searchText = searchBar.text
        else {
            return
        }
        
        if searchText.isEmpty == true {
            
            func didUpdateStruct(_ swiftManager: SwiftManager,swiftData: SwiftData) {
                
                dispatchQueue.main.async {
                    
                    self.filteredMoviesArray = swiftData.results
                    
                    self.tableView.reloadData()
                    
                }
                
            }
            
            print("EMPTY")
            return

        } else {
            
            func didUpdateStruct(_ swiftManager: SwiftManager,swiftData: SwiftData) {
                
                dispatchQueue.main.async {
                    
                    self.filteredMoviesArray = swiftData.results.filter {
                        $0.title!.uppercased().contains(searchText.uppercased())
                    }
                    
                    self.tableView.reloadData()
                    
                }
                
            }
            
            print("FULL")
            return
            
        }
        
        
    }
    
    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
        
        searchBar.text = ""
        
        swiftManager.fetchUrl()
        
    }
    
}

// END SEARCHBAR

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...