2010-12-06 4 views
4

Ich arbeite an einer Anwendung, die eine Ansichtshierarchie hat, die Apple Musik oder iPod aps sehr ähnlich ist. Es hat einen UITabBarController, der UINavigationControllers enthält und UITableViews präsentiert, die schließlich zu einem UIViewController führen, der hidesBottomBarWhenPushed auf YES in seinem designierten Initialisierer setzt (um die UITabBar auszublenden). Die vorherigen UITableViews haben alle eine UISearchBar in ihrem tableHeaderView, die ich in viewWillAppear: aus dem Sichtfeld verschiebe.hidesBottomBarWhenPushed und eine aufdringliche UISearchBar auf kurzen UITableViews

Die UISearch bleibt normalerweise verborgen, bis sie nach unten gezogen wird, außer wenn sie aus der UIView in eine kurze UITableView zurückgeht. Es bleibt durch die UITableView-Methoden viewWillAppear: und viewDidAppear: und die UIView-Methoden viewWillDisappear: und viewDidDisappear: versteckt und schließlich von selbst aus. Wenn ich in der UIView self.hidesBottomBarWhenPushed = YES; auskommentiere, bleibt die UISearchBar verborgen, wenn sie aus dieser Ansicht heraus zurückgeht.

Was verursacht die UITableView die UISearchBar zu enthüllen, nachdem ich es ausgeblendet habe? Gibt es in der Ansichtshierarchie eine höhere delegate-Methode, mit der ich verhindern kann, dass sie auftritt?


aktualisieren Ich habe ein einfaches Projekt mit der minimalen Menge an Code erstellt benötigt, um das Problem zu reproduzieren. Laden Sie PushySearchBar.zip herunter. (Sorry, ich hatte eine mod_rewrite-Regel, die Downloads von Domänen von Drittanbietern verhindert. Ich habe Stack Overflow zur Whitelist hinzugefügt. Der Download sollte jetzt funktionieren.)

+0

Werfen Sie einen Blick auf meine Antwort hier https://stackoverflow.com/a/45956456/2774520 –

Antwort

1

Hat der UISearchBar Text, wenn er aus dem UIViewController zurückgeht? Scheint plausibel, dass dies dazu führen könnte, dass es standardmäßig angezeigt wird.

EDIT: (Hinzufügen von unten Kommentar zu Körper Antwort für leichteres Einscannen/Befund sowie eine Erklärung hinzuzufügen.)

in viewDidAppear: in SearchableTableViewController Ihren viewWillAppear: Methode Körper duplizieren. Dies behebt das Problem in meinen Tests.

Im Grunde genommen stellt dies sicher, dass der Offset auf beiden Seiten der Navigationsanimation korrekt eingestellt ist.

+0

Nope. Nur der standardmäßige Platzhalter "Suchen", der nicht dazu führt, dass er in einer der vorherigen Ansichten angezeigt wird. –

+0

Eine andere Theorie: Könnte sich 'UITableView' an die Größe anpassen, während'UITabView' wieder eingefügt wird, was dazu führt, dass' contentOffset' sich ändert? Das scheint weit hergeholt, aber wenn Sie "NSLog" oder "po" den Offset vor und nach, könnten Sie den Schuldigen finden. – Brad

+0

Es ist möglich, aber die Änderung tritt auf, nachdem alle View-Lifecycle-Methoden ausgelöst wurden, so dass ein Teil des Problems darin besteht, herauszufinden, wo die 'NSLog()' für die "nachher" -Prüfung platziert werden soll. –

0

Shaun - Ich lerne immer noch Objective-C auch, also könnte ich auf diesem sein, aber ich denke, das Problem ist, dass ViewWillAppear: einmal ausgelöst wird, wenn Sie die Viewable Viewable View 3 erhalten, und wenn Sie dann versuchen, rückwärts zu gehen von Terminal zu SearchableTableView 3 wird nicht erneut ausgelöst. Ich kopierte den Code in ViewWillAppear: und steckte ihn in ViewDidAppear: und die Suchleiste scheint sich richtig zu verstecken.

UPDATE: Dieser Beitrag scheint die oben und bieten sauberere Lösungen zu überprüfen: iPhone viewWillAppear not firing

+0

Danke Jon, aber das Problem ist nicht, dass UITableView 'viewWillAppear:' nicht feuert, wenn die UIView zurückgesetzt wird. Das Problem ist, dass ein Ereignis nach der Methode feuert sein contentOffset zurück auf '(0,0)' bringt und dazu führt, dass die UISearchBar (die * erfolgreich außerhalb des Bildschirms verschoben wurde in der zurückkehrenden UITableView-Datei 'viewWillAppear: ') wieder sichtbar wird. –

Verwandte Themen