SearchBar im TableView Controller verschwindet

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SearchBar im TableView Controller verschwindet

    Guten Morgen Zusammen,

    ich arbeite aktuell das erst Mal mit einer Search Bar.
    In meiner swift 2 app habe ich einen TableView Controller und einen Nav Controller:

    1.png




    Wenn ich die App starte, sieht es dann so aus:

    2.png




    Soweit alles super.
    wenn ich dann aber in die search bar tippe geschieht das:

    3.png



    Die Navbar und Searchbar verschwinden - aber nicht von jetzt auf gleich, sondern ein wenig "animiert"
    Mein Wunsch ist es eigentlich, dass die Navbar verschwindet und die Search Bar solange an die "NavBar Position" geht.
    Das beides verschwindet ist aber nicht mein Ziel :/


    das ist mein kompletter Code:


    JavaScript-Quellcode

    1. class TableViewController: UITableViewController, ADBannerViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate {
    2. @IBOutlet weak var MyTable: UITableView!
    3. let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    4. var items = [CoreData_ITEMS]()
    5. var searchController: UISearchController!
    6. /*************** DATEN ABRUFEN ***************/
    7. func DatenAbrufen() {
    8. let fetchRequest = NSFetchRequest(entityName: "ITEMS")
    9. do {
    10. try self.items = self.managedObjectContext!.executeFetchRequest(fetchRequest) as! [CoreData_ITEMS]
    11. } catch { }
    12. self.MyTable.reloadData()
    13. self.refreshControl!.endRefreshing()
    14. }
    15. /*************** VIEW DID LOAD ***************/
    16. override func viewDidLoad() {
    17. super.viewDidLoad()
    18. searchController = UISearchController(searchResultsController: nil)
    19. searchController.dimsBackgroundDuringPresentation = false
    20. searchController.searchBar.placeholder = "Search here..."
    21. searchController.searchBar.delegate = self
    22. searchController.searchBar.sizeToFit()
    23. MyTable.tableHeaderView = searchController.searchBar
    24. MyTable.tableFooterView = UIView()
    25. self.refreshControl = UIRefreshControl()
    26. self.refreshControl!.addTarget(self, action: #selector(TableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    27. MyTable.addSubview(refreshControl!)
    28. }
    29. func refresh(sender: AnyObject) {
    30. // DO SOMETHING
    31. }
    32. /*************** ANZAHL DER ZELLEN ERMITTELN ***************/
    33. override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    34. return items.count
    35. }
    36. /*************** ZELLEN MIT INHALT FÜLLEN ***************/
    37. override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    38. let cell = self.tableView.dequeueReusableCellWithIdentifier("MyTableCell") as! ModifyCells
    39. var ITEM:CoreData_ITEMS
    40. ITEM = items[indexPath.row]
    41. cell.ItemName.text = ITEM.ItemName
    42. return cell
    43. }
    44. }
    Alles anzeigen

    Jemand ne Idee was ich falsch mache, bzw. vergessen habe ? :/
  • vielleicht ein Reihenfolgeproblem?
    pack doch das
    24. MyTable.tableFooterView = UIView()
    25. self.refreshControl = UIRefreshControl()
    26. self.refreshControl!.addTarget(self, action: #selector(TableViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
    mal vor den search krams.

    ansonsten war das raywenderlich Tutorial zum ersten Mal nicht so gut, fand ich ;)
    ----
    Macht's gut und danke für den Fisch
  • hm....

    nur mal um Fehler auszuschließen:
    kommentiere bitte mal die Zeilen 24 bis einschließlich 27 (im alten Code oben) aus und ersetze Zeile 23 durch (evtl. auch mal Zeile 2 mit auskommentieren)
    tableView.tableHeaderView = searchController.searchBar


    **edit**
    Ist Dein NavigationController der erste Controller oder wird der irgendwoher bereits aufgerufen (evtl auch schon mit einem NavigationController). Überprüf doch sonst mal, welchen Du siehst. Einfach in viewDidLoad self.title = "suchnavcon" oder so angeben, um sicher zu sein, dass wirklich der NavController von der Klasse "TableViewController" der Bösewicht ist
    ----
    Macht's gut und danke für den Fisch

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ichessetoast () aus folgendem Grund: noch ne Idee

  • habe den ersten Absatz umgesetzt - NavBar und SearchBar verschwinden
    wenn ich im viewDidLoad self.title = "suchnavcon" eingeben, dann erhält meine NavBar auch diesen Titel

    vllt. hilft die diese Info noch.
    Storyboard schaut so aus:

    TabController - NavController - TableViewController




    ** UPDATE **
    habe jetzt Mal folgendes sersucht

    Quellcode

    1. let searchController = UISearchController(searchResultsController: nil)
    2. searchController.searchResultsUpdater = self
    3. searchController.hidesNavigationBarDuringPresentation = true
    4. searchController.dimsBackgroundDuringPresentation = false
    5. searchController.searchBar.scopeButtonTitles = ["Tab 1","Tab 2"]
    6. searchController.searchBar.sizeToFit()
    7. self.tableView.tableHeaderView = searchController.searchBar

    Beim Start sieht es so aus: (Habe die erste Zeile leicht grau gemacht, damit man sieht, wo diese anfängt und aufhört)

    Bildschirmfoto 2016-04-11 um 14.47.32.png


    wenn ich nun auf die Suchleiste tippe passiert das:

    Bildschirmfoto 2016-04-11 um 14.51.10.png


    Die Suchleiste muss da sein, die Scopes sieht man, der Rest verschwindet allerdings viel zu weit nach oben.
    Außerdem ist der Abstand von der Suchleiste inkl. Scopes zur ersten Zeile (hell grau hinterlegt) viel zu groß.
    Da sollte im besten Fall überhaupt kein Abstand sein




    ** UPDATE II **
    Es wird noch skurriler.

    habe jetzt spaßeshalber im viewDidload das hinzugefügt:


    Quellcode

    1. navigationController?.setNavigationBarHidden(true, animated: true)


    Beim Start:

    Bildschirmfoto 2016-04-11 um 15.00.13.png



    Beim Antippen der Suchleiste:
    Bildschirmfoto 2016-04-11 um 15.00.16.png


    Siet ja nicht schlecht aus - bis auf die Fehlende Navbar ....

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von PetTus ()

  • okay .... die fehlende NavBar bekommst Du wieder, wenn Du


    wieder zurück setzt (oder löschst, da default gleich false ist).

    Quellcode

    1. searchController.hidesNavigationBarDuringPresentation = false



    Tatsächlich sieht es so aus, als ob er deine TableView nicht richtig skaliert!
    Wie hast Du die erstellt und sind die Constraints richtig da?
    Mich wundert, dass Du ja offenbar bereits einen UITableViewController als Klasse angelegt hast. Also hast Du wahrscheinlich auch im Storyboard den "gelben" UTVController ausgewählt? Oder hast Du einen UIViewController genommen und einen TableView reingezogen. Das würde erklären, warum Du Dir die noch als Outlet definiert hast und hier vielleicht auch die Constraints fest und nicht variable gestaltet hast?

    "Beweisen" liesse sich dies evtl damit, wenn Du unterschiedliche Hintergrundfarben für die NavigationBar, TableViewBackground und ViewControllerBackground setzen würdest. Vermute mal, dass - im letzten Screenshot - der weiße Bereich oberhalb der SearchBar evtl die gleiche Farbe hat wie der ViewController
    ----
    Macht's gut und danke für den Fisch
  • wieder zurück setzt (oder löschst, da default gleich false ist).

    wäre eine Möglichkeit, ist aber bestimmt nicht die prof. Lösung ^^

    Meine Tabelle ist ein ganz normaler TableViewController, welchen ich als fertigen TableViewController ins StoryBoard gezogen haben.
    Constrains habe ich automatisch setzen lassen.

    Korrekt, haben den gelben UTVController ausgewählt.
  • Lange Rede, kurzer Sinn.

    habe jetzt schon zu viel Zeit in die Problematik investiert.
    Ich kann mich auch damit zufrieden geben, dass die SearchBar unter der Navbar bleibt.

    Nächstes Problem was ich jetzt habe:

    Ich starte die App - TVC mit Searchbar erscheint - ich tippe die Searchbar an (Cancel Button erscheint) - wenn ich in diesem Zustand jetzt auf eine Zelle tippe, welche einen segue auslöst, lande ich im nächsten VC, und die Searchbar bleibt - diese soll aber verschwinden wenn ich meinen TVC verlasse.

    wie stelle ich das denn an? oO