SearchBar innerhalb des NavigationItems anzeigen

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

  • SearchBar innerhalb des NavigationItems anzeigen

    Hallo zusammen,

    in einem TableViewController habe ich einen UISearchController initiiert und das UISearchResultsUpdating-Protokoll definiert.

    Wenn ich jetzt in der viewDidLoad-Methode folgenden Code ausführe:

    Quellcode

    1. tableView.tableHeaderView = searchController.searchBar

    funktioniert es wie gewünscht und die Suchleiste erscheint zwischen NavigationItem und der Table.

    In einem Lehrbuch wird nun der neuere Ansatz gezeigt, nach dem die Suchleiste im NavigationItem erscheinen soll:

    Quellcode

    1. navigationItem.searchController = searchController
    wodurch die Suchleiste aber leider gar nicht angezeigt wird. Sieht jemand meinen Fehler?
    Im Buch wird davon gesprochen, dass dieser Ansatz iOS 11 erfordert, aber mein Target ist 11.4 (ich habe den Standardwert unverändert gelassen).

    Viele Grüße,
    Tazaki
  • Es ist sehr seltsam. Wenn ich aus einem TableViewController heraus (aus dem die SearchBar initiiert wird und eigentlich schon sichtbar sein sollte) zu einem anderen TableViewController navigiere (der dem NavigationItem ebenfalls einen SearchController zuweist), funktioniert es nicht.

    Navigiere ich dagegen aus dem ersten TableViewController zu einem ViewController, funktioniert es wie gewünscht und die SearchBar ist sichtbar. Könnte das ein Bug sein, oder mache ich es schlichtweg falsch?

    /Edit: ich würde das Verhalten gerne in der iOS 12 Beta testen, das ist aber angemeldeten Entwicklern vorbehalten, oder?

    /Update: es lag an der Property "hidesSearchBarWhenScrolling", die ist wohl standardmäßig auf "true" gesetzt ist. Ich wusste nicht, dass TableViews direkt eine ScrollView enthalten.. :/
    Ich danke dir MCDan für deine Hilfsbereitschaft! :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tazaki ()

  • Ich bitte den Doppel-Post zu entschuldigen, aber ich wollte nicht extra ein neues Thema für eine damit zusammenhängende Problematik eröffnen..

    Es geht darum, dass im Tutorial folgende Eigenschaft festgelegt wird:


    Quellcode

    1. searchController.obscuresBackgroundDuringPresentation = false
    mit dem Hintergedanken, dass man die unter Umständen gefilterten Tabelleneinträge auch während der Suche noch auswählen kann, ohne aktiv die Suche zu beenden. Wenn ich dann allerdings in die Suchleiste klicke und anschließend auf einen Eintrag, bekomme ich folgenden Fehler:

    "Warning: Attempt to present <..EditIngredientViewController: ..> on <..IngredientsTableViewController: ..> which is already presenting (null)"

    Ich habe dann versucht in der tableView(:didSelectRowAt:) Methode mittels dismiss() und endEditing(true) den Suchvorgang zu beenden, aber leider ohne Erfolg. Da es beispielsweise in der Kontakte-App funktioniert, ist es grundsätzlich schon möglich.. hätte zufällig jemand eine Idee, wo ich da ansetzen könnte?

    Vielen Dank!
  • Eigentlich ist es eine Seque, die tableView(:didSelectRowAt:) hatte ich nur als Punkt überlegt, an dem ich ansetzen könnte, aber es ist zeitlich wohl schon zu spät.. Ich verstehe leider auch nicht, warum dort "which is already presenting (null)" steht. Also speziell das "(null)". Sollte da nicht ein ViewController angegeben sein?
  • Hm, Du kannst Dein Projekt ja mal mit dem Sample Projekt aus diesem Tutorial raywenderlich.com/472-uisearch…-tutorial-getting-started vergleichen.

    Vielleicht ist ja ersichtlich, was bei Dir anders ist. Alternativ würde ich die Seque im Storyboads einfach mal löschen und den IngredientsTableViewController per Code anzeigen. Dies lässt sich dann auch besser debuggen. ;)

    Ohne Suche klappt die Anzeige des IngredientsTableViewControllers aber problemlos, oder?

    Update: Ich habe mal ein wenig mit dem Sample Projekt aus dem Tutorial gespielt und den SplitViewController entfernt. Bei dem Projekt klappt alles ohne Probleme. Evtl. gibt es bei Dir ein Problem bei den Seques in Deinem Storyboard.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • Vielen Dank MCDan, es lag wirklich an den Übergängen. Zwar weiß ich nicht genau, wo der Fehler lag, aber es scheint, als würde sich der Übergang aus einer gefilterten TableView heraus (also sobald das SearchField verwendet wird - auch ohne Texteingabe) anders umgesetzt wird, als aus der originalen TableView.

    Ich werde den gesamten Mechanismus nochmals überarbeiten und bin dir sehr dankbar für die Hilfe :)