在swift中使用搜索栏时找不到任何东西3

问题描述:

我有一点问题。我可以通过搜索栏搜索数组。但是当我搜索一个不在我阵列中的城市时,不会改变任何东西。我想在这种情况下显示错误消息。例如“没有发现任何城市在swift中使用搜索栏时找不到任何东西3

我的代码如下:

var cities = [String]() 
var citiesFiltered = [String]() 
var searchBarActive:Bool = false 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    cities = ["Abu Dabi","Amman","Berlin","Catarman","Dortmund"] 
} 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if(searchBarActive){ 
     return citiesFiltered.count 
    } 
    return cities.count 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) 

    if(searchBarActive){ 
     cell.textLabel?.text = citiesFiltered[indexPath.row] 
    }else{ 
     cell.textLabel?.text = cities[indexPath.row] 
    } 

    return cell 
} 

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { 
    searchBarActive = true 
} 

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { 
    searchBarActive = false 
} 

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 

    if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

    self.tableView.reloadData() 
} 

//尝试使用此更改。

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if(searchBarActive && citiesFiltered.count == 0){ 
     return 1 
    } 
    else if searchBarActive { 
     return citiesFiltered.count 
    } 
    return cities.count 
} 

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
    let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) 

    if(searchBarActive && citiesFiltered.count == 0){ 
     cell.textLabel?.text = "Not found any city" 
    } 
    else if searchBarActive { 
     cell.textLabel?.text = citiesFiltered[indexPath.row] 
    } 
    else{ 
     cell.textLabel?.text = cities[indexPath.row] 
    } 

    return cell 
} 


func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 


    self.tableView.reloadData() 
} 
+0

否则如果searchBarActive { RETURN citiesFiltered.count }如果您编辑我会接受您的答案@ user3608500 – Mayday

+0

感谢您指出......不知何故,我错过了... .. – user3608500

的问题是在这里

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 

    citiesFiltered = cities.filter({ (text) -> Bool in 
     let txt : NSString = text as NSString 
     let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive) 

     return range.location != NSNotFound 
    }) 

    if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

    self.tableView.reloadData() 
} 

要设置酒吧为无效,因此显示未过滤的列表中,当过滤的数组是空的。 通过消除

if(citiesFiltered.count == 0){ 
     searchBarActive = false 
    }else{ 
     searchBarActive = true 
    } 

的东西是不在名单上搜索时,你会得到一个空表。

+0

你是对的。那么,如何在没有任何东西时显示特别的消息? – Mayday

+0

@ user3608500答案应该诀窍 – carlito