如何在Swift3中使用TableView和SearchBarController创建范围搜索 [英] How to create a scope search using tableview and searchbarcontroller in swift3

查看:113
本文介绍了如何在Swift3中使用TableView和SearchBarController创建范围搜索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,所有人都使用tableview和serchbarcontroller设计了范围搜索.为了达到这个目的,使用了下面的代码,但是以某种方式它没有返回我实际的输出.希望能有所帮助.谢谢.

Hello all have designed a scope search using tableview and serchbarcontroller. To achieve this have used below code but somehow its not returning me the actual output. Hoping for the help. Thank you.

输出:

这是我输出的屏幕截图

代码:

import UIKit

class SearchBookVC: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchResultsUpdating, UISearchBarDelegate {

@IBOutlet weak var tableview: UITableView!

struct Books  {
    var name = String()
    var board = String()
    var classname = String()
    var area = String()
    var city = String()
    }

    var books = [Books(name: "Physics", board: "CBSE",classname:"XI",area:"Karnataka",city:"Bangalore"),
                 Books(name:"English",board:"CBSE",classname:"X",area:"Maharashtra",city:"pune"),
                 Books(name:"biology",board:"IB",classname:"XII",area:"Gujarat",city:"Rajkot"),

                 Books(name:"chemistry",board:"IB",classname:"X",area:"Gujarat",city:"Ahmedabad"),

                 Books(name:"Maths",board:"ICSE",classname:"IX",area:"Maharashtra",city:"Mumbai"),
                 Books(name:"Science",board:"ICSE",classname:"XII",area:"Karnataka",city:"Mysore")
                 ]
    var filteredBooks = [Books]()

    let searchController = UISearchController(searchResultsController: nil)



    override func viewDidLoad() {
    super.viewDidLoad()

      filteredBooks = books

       searchController.searchResultsUpdater = self
       searchController.dimsBackgroundDuringPresentation = false
       definesPresentationContext = true
       tableview.tableHeaderView = searchController.searchBar

       searchController.searchBar.scopeButtonTitles = ["All","Name", "Board", "Class", "Area","City"]

       searchController.searchBar.delegate = self

       self.tableview.register(mycell.self, forCellReuseIdentifier: "cell")


    // Do any additional setup after loading the view.
}

func applySearch(searchText: String, scope: String = "All") {


    if searchController.searchBar.text! == ""
    {
        filteredBooks = books.filter { book in
            let nameofbook = ( scope == "All") || (book.name == scope) || (book.board == scope) || (book.classname == scope) || (book.area == scope) || (book.city == scope)
            return nameofbook
    }
    }
        else
        {
            filteredBooks = books.filter { book in
                let nameofbook = ( scope == "All") || (book.name == scope) || (book.board == scope) || (book.classname == scope) || (book.area == scope) || (book.city == scope)
                return nameofbook && book.name.lowercased().contains(searchText.lowercased()) && book.board.lowercased().contains(searchText.lowercased()) && book.classname.lowercased().contains(searchText.lowercased()) && book.area.lowercased().contains(searchText.lowercased()) && book.city.lowercased().contains(searchText.lowercased())
            }
        }
    self.tableview.reloadData()
}
func updateSearchResults(for searchController: UISearchController) {

     let searchBar = searchController.searchBar
    let selectedScope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex]
    applySearch(searchText: searchController.searchBar.text!,scope: selectedScope)
}
func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
    applySearch(searchText: searchController.searchBar.text!,scope: searchBar.scopeButtonTitles![selectedScope])
}



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.filteredBooks.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell  {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! mycell

    cell.bookname?.text = self.filteredBooks[indexPath.row].name
    cell.Boardname?.text = self.filteredBooks[indexPath.row].board
    cell.classtitle?.text = self.filteredBooks[indexPath.row].classname

    return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Row \(indexPath.row) selected")
}

}

推荐答案

可以这样尝试吗:

  1. 创建一个自动完成文本字段数组,每个数据源一个.
  2. 首先让这些文本字段不可见.
  3. 选择值并单击搜索按钮后,使相应的文本字段可见.

不确定是否会满足您的要求,如果有任何问题,请发表评论.

Not sure if it will meet your requirement, please leave comments if you have any problem.

这篇关于如何在Swift3中使用TableView和SearchBarController创建范围搜索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆