2016-07-29 19 views
1

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:

enter image description here

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:

enter image description here

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:

enter image description here

Und meine Viewcontroller Inspektor:

enter image description here enter image description here

+0

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

+0

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? –

+0

Ja, bitte. Zu wissen, die Ansichtshierarchie und wie Sie die Steckdosen setzen könnte helfen – fiks

Antwort

1

Sie haben 3 verschiedene Ausgänge, die mit der Tabellenansicht verbunden sind.

Es bedeutet, dass, wenn Sie die Tableview verstecken, können Sie auch die Ansicht verbergen, weil sie auf den gleichen Search Table View

Sie müssen sicherstellen, verbunden ist, dass Sie nur an eine Steckdose Tisch Ansicht anschließen.

bearbeiten

Um genauer zu sein:

  1. Sie haben Ihre View-Controller von UITableViewController zu UIViewController ändern.

  2. Der Ausgang view wird mit der Eigenschaft view des ViewControllers verbunden.

  3. Die tableView Steckdose wird entfernt, weil in einem normalen UIViewController diese Eigenschaft nicht existiert. (Es ist in UITableViewController definiert)

  4. SearchTableView sollte mit der searchTableView Eigenschaft verbunden sein, die Sie in Ihrem View-Controller definieren.

+0

Danke. Aber wie verknüpfe ich sie mit anderen Ansichten? Oder mehr, zu was verbinde ich sie? Und sind meine TableView und meine searchTableView zwei verschiedene Dinge? Ich füge einfach das Bild von jedem Link, den ich machen kann ^^ –

+0

Aktualisierte meine Antwort :) Hoffe es hilft. Dieser Beitrag könnte auch hilfreich sein, um eine Tabellenansicht in einem normalen UIViewController in xib einzurichten: https://www.wheartswift.com/how-to-make-a-simple-table-view-with- ios-8-and-swift/ – fiks

+0

Aber wenn ich meinen Controller zu einem UIView ändere, kann ich die TableView-Funktionen nicht überschreiben. Soll ich nebenbei eine UITableViewController-Datei erstellen? –