search bar in ios swift
30,844
Solution 1
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate {
@IBOutlet var tblview: UITableView!
@IBOutlet var searchview: UISearchBar!
var data:[String] = ["Dev","Hiren","Bhagyashree","Himanshu","Manisha","Trupti","Prashant","Kishor","Jignesh","Rushi"]
var filterdata:[String]!
override func viewDidLoad() {
super.viewDidLoad()
tblview.dataSource = self
searchview.delegate = self
filterdata = data
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filterdata.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tblview.dequeueReusableCell(withIdentifier: "cell", for: indexPath)as!TableViewCell1
if filterdata.count != 0
{
cell.textview.text = filterdata[indexPath.row]
}
else{
cell.textview.text = data[indexPath.row]
}
return cell
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
// filterdata = searchText.isEmpty ? data : data.filter {(item : String) -> Bool in
filterdata = searchText.isEmpty ? data : data.filter { $0.contains(searchText) }
//return item.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
tblview.reloadData()
}
Solution 2
let searchController = UISearchController(searchResultsController: nil)
navigationItem.hidesSearchBarWhenScrolling = true
navigationItem.searchController = searchController
![Admin](/assets/logo_square_200-5d0d61d6853298bd2a4fe063103715b4daf2819fc21225efa21dfb93e61952ea.png)
Author by
Admin
Updated on July 09, 2022Comments
-
Admin almost 2 years
I want to use search bar in my app.I am trying to use it but exceptions are coming . I have got an array of dictionary called member
[[String:Anyobject]]
and from this i have taken out the name and stored into an array data of type string and it is not working.Here is my code :
import UIKit class hcbaViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate { @IBOutlet var searchbar: UISearchBar! @IBOutlet var tableview: UITableView! var member = [[String:AnyObject]]() var members = [String:AnyObject]() var searchActive = true var filtered:[String] = [] var data: [String] = [] override func viewDidLoad() { super.viewDidLoad() print(data) print("________-----------________----------") print(member) // Do any additional setup after loading the view. } func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { searchActive = true } func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { searchActive = false } func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { searchActive = false } func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { searchActive = false } func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { filtered = data.filter({ (text) -> Bool in let tmp:NSString = text as NSString let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) return range.location != NSNotFound }) if (filtered.count == 0){ searchActive = false } else{ searchActive = true } self.tableview.reloadData() } func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return "MemberDirectory" } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return member.count if(searchActive){ return filtered.count } else{ return data.count } // return member.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath) var display = member[indexPath.row] cell.textLabel?.text = display["Name"] as! String? cell.detailTextLabel?.text = display["email"] as? String let n = display["Name"] as! String data.append(n) return cell } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let vc = segue.destination as! hcbadetailViewController vc.kk = members } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { members = member[indexPath.row] self.performSegue(withIdentifier: "bye", sender: nil) }