Ich habe eine UITableViewController
und ich habe eine Suchleiste als Header-Ansicht hinzugefügt. Ich versuche, die Daten der Tabellenansicht neu zu laden, wenn sich der Text in der Suchleiste ändert, aber nicht funktioniert.Suchergebnisse in UITableView anzeigen
Hier ist meine textDidChange
Methode. Für Kontext ist jsonArray
[[String: AnyObject]]
und wird von einem anderen Ansichtscontroller übergeben. Das searchResults-Array wird dann auf jsonArray
in viewDidLoad()
festgelegt und die Tabellenansicht verwendet searchResults als Datenquelle.
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.characters.count == 0 {
searchResults?.removeAll()
searchResults = jsonArray!
} else {
searchResults?.removeAll()
for market in jsonArray! {
let titleRange = market["name"]?.range(of: searchText, options: .caseInsensitive)
var address = String()
var city = String()
var state = String()
var zip = Int()
if let address1 = market["address1"] as? String {
address = address1
}
if let city1 = market["city"] as? String {
city = city1
}
if let state1 = market["state"] as? String {
state = state1
}
if let zip1 = market["zip"] as? Int {
zip = zip1
}
let zipCode = String(describing: zip)
let addressString = String("\(address) " + "\(city), " + "\(state) " + "\(zipCode)")
let addressRange = addressString?.range(of: searchText, options: .caseInsensitive)
if titleRange != nil {
searchResults?.append(market)
} else if addressRange != nil {
searchResults?.append(market)
}
}
}
tableView.reloadData()
}
Ich habe diesen Druck Erklärung am Ende der else-Anweisung nach der addierte for-Schleife und es zeigt, dass das Array alle Objekte enthält es ursprünglich enthalten, so dass es meine Bereiche sieht aus wie nicht richtig funktioniert .
print("search array: \(searchResults?.count)")
Ich verwende Swift-Arrays, nicht NSArray. – raginggoat
ok srrry darüber –