ios - 为什么搜索不起作用?

标签 ios swift uisearchbar

我有一个数组,我正在尝试进行实时搜索。因此,最初我将拥有未过滤的数组,并且当我搜索时, TableView 将在我键入时更新。我已经设置了委托(delegate),所以我不知道为什么它不起作用。如有任何帮助,我们将不胜感激:)

@IBOutlet weak var table: UITableView!
var searchController = UISearchController()
var unfilitered = ["cat", "dog", "bat", "tiger"]
var filtered = [String]()
var shouldShowSearchResults = false

override func viewDidLoad() {
    super.viewDidLoad()

    configureSearchController()
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell: searchcell = table.dequeueReusableCellWithIdentifier("CELL") as! searchcell

    if shouldShowSearchResults {
        cell.animal.text = filtered[indexPath.row]
    }
    else {
        cell.animal.text = unfiltered[indexPath.row]
    }

    return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if shouldShowSearchResults {
        return filtered.count
    }
    else {
        return unfiltered.count
    }
}

func configureSearchController() {
    searchController.searchBar.delegate = self
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchBar.placeholder = "Search"
    searchController.searchBar.sizeToFit()
    table.tableHeaderView = searchController.searchBar
}

func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    shouldShowSearchResults = true
    table.reloadData()
}


func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    shouldShowSearchResults = false
    table.reloadData()
}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    if !shouldShowSearchResults {
        shouldShowSearchResults = true
        table.reloadData()
    }

    searchController.searchBar.resignFirstResponder()
}

func updateSearchResultsForSearchController(searchController: UISearchController) {
    let searchString = searchController.searchBar.text


    filtered = unfiltered.filter({ (animal) -> Bool in
        let animalText: NSString = animal

        return (animalText.rangeOfString(searchString!, options: NSStringCompareOptions.CaseInsensitiveSearch).location) != NSNotFound
    })

    table.reloadData()
}

最佳答案

除非在主线程上执行,否则 reloadData 方法不会强制重绘 tableView。

关于ios - 为什么搜索不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120697/

相关文章:

ios - 苹果(企业)开发者程序 : Same team agent of multiple teams seems not possible

ios - 获取深层链接 url iOS 中的参数值

ios - 快速关闭 "partial apply forwarder"

swift - View 不再出现第二次[Swift]

IOS:UISearchBar 部分覆盖带有提示的 UINavigationBar

ios - NSOperation completionBlock 被调用了两次

ios - 解析目标 - C 到 Swift iOS

ios - 未计算 UITableViewCell 中的约束

uinavigationcontroller - 当搜索栏显示在前一个 View 的导航栏中时,无法在插入的 vc 导航栏中更改后退按钮标题 "Search"

ios - 不搜索第一个字母