Ich habe in meiner iOS App eine mapView
, und eine UISearchBar
, um Standorte zu suchen und den Benutzer darauf zu zentrieren. Die Ergebnisse meiner Suche werden durch automatische Vervollständigung erstellt und in einer tableView
angezeigt.tableView.hidden bricht andere Elemente
Ich hatte Probleme damit, als ich auf Abbrechen klickte, es zeigte mir alle meine Daten in der tableView
.
So implementiert ich diese Funktion:
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchTableView.hidden = true
}
Aber die dieser Funktion machen macht dies:
Ich weiß nicht (und nicht wissen, wie man sehen) wenn mein mapView
immer noch unter dem schwarzen Bildschirm ist.
By the way, wenn ich meine Löschen-Taste-Funktion deaktivieren, und etwas suchen, wenn ich auf Cancel
klicken, wird es so etwas wie dieses an:
zu verstecken meine tableView
wieder, ich muss Machen Sie eine weitere Suche, löschen Sie sie mit dem kleinen Kreuz-Button und brechen Sie ab.
Mein Code, der Auto-Vervollständigung suchen, ist wie folgt aus:
func initTableView() {
searchTableView.delegate = self
searchTableView.dataSource = self
searchTableView.scrollEnabled = true
searchTableView.hidden = true
}
func searchBarSearchButtonClicked() {
searchTableView.hidden = false
searchBar.resignFirstResponder()
dismissViewControllerAnimated(true, completion: nil)
searchBar(searchBar, textDidChange: searchBar.text!)
}
func searchBar(_searchBar: UISearchBar, textDidChange searchText: String) {
searchTableView.reloadData()
searchAutocompleteEntriesWithSubstring(searchText)
}
func searchAutocompleteEntriesWithSubstring(substring: String) {
searchBar.filtredDatas.removeAll(keepCapacity: false)
for curString in searchBar.datas {
let myString:NSString! = curString.title! as NSString
let substringRange :NSRange! = myString.rangeOfString(substring)
if (substringRange.location == 0) {
searchBar.filtredDatas.append(curString)
}
}
}
Dies ist aus meiner ViewController.swift
Datei. Meine searchBar
Variable ist eine benutzerdefinierte Klasse, die eine NSArray
Daten und eine andere fileterDatas
enthält.
@IBOutlet weak var mapView: UGOMapController!
@IBOutlet var searchTableView: UITableView!
@IBOutlet weak var searchBar: UGOSearchBar!
Danke für Ihre Hilfe. Wenn Sie mehr von meinem Code benötigen, kann ich diesen Beitrag bearbeiten.
Edit:
Hier sind meine UITableView Funktionen, für searchTableView verwendet
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchBar.filtredDatas.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let autoCompleteRowIdentifier = "AutoComplete"
var cell = tableView.dequeueReusableCellWithIdentifier(autoCompleteRowIdentifier) as UITableViewCell!
if cell != nil {
let index = indexPath.row as Int
if (searchBar.filtredDatas.count > 0) {
cell!.textLabel!.text = searchBar.filtredDatas[index].title
}
}
else {
cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: autoCompleteRowIdentifier)
}
return cell!
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let selectedCell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
searchBar.text = selectedCell.textLabel!.text
}
Und meine Hierarchie:
Und meine Viewcontroller Inspektor:
Sie können die Ansichten Hierarchie in Xcode inspizieren: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/ExaminingtheViewHierarchy.html Ich würde auch zu prüfen, ob vorschlagen ' searchTableView' ist korrekt eingestellt. – fiks
Ich habe gerade die View-Hierarchie überprüft (danke für die Tipps ^^), aber nein, an dieser Stelle stimmt alles ... Andererseits habe ich meine numberOfRowInSection/cellForRowAtIndex ... -Funktionen. Ich benutze sie irgendwie so, dass es möglich ist, aber ich bin total neu auf swift, um wirklich zu sehen, was darin falsch ist. Sollte ich es in die Post legen? –
Ja, bitte. Zu wissen, die Ansichtshierarchie und wie Sie die Steckdosen setzen könnte helfen – fiks