UISearchDisplayController Ohne Dimmen?

8

Ich schreibe eine SplitView iPad App. Innerhalb des DetailViewControllers gibt es eine kleine Ansicht, die ein UITableView und ein UISearchBar und seinen Controller enthält. Diese Ansicht repräsentiert nicht den gesamten für den DetailViewController reservierten Bildschirmbereich. Tatsächlich verwendet es nur die Hälfte davon. Auf der anderen Seite ist UIImageView .

Und hier kommt der Ärger ins Spiel: Jedes Mal, wenn ich die Suchleiste benutze, dimmt der Displaycontroller (wie ich annehme) alles, was im DetailViewController vorhanden ist, einschließlich der Bildansicht. Das stimmt nicht mit dem überein, was jemand erwarten würde, wenn er die App ausführt. Gibt es eine Möglichkeit, den Rahmen zu dimmen? Oder zumindest das Dimmen für immer deaktivieren?

Vielen Dank im Voraus.

    
Aloha Silver 20.08.2010, 03:12
quelle

4 Antworten

11

Sie haben Recht, dass es der UISearchDisplayController ist, der den "Dimm" -Effekt verwaltet, den Sie sehen.

Was der UISearchDisplayController tut, ist das Hinzufügen eines UIControl als Unteransicht zur Ansicht des searchContentsControllers (eine Eigenschaft von UISearchDisplayController), die wahrscheinlich Ihr Detailansicht-Controller ist. Dieser UIControl ist nur eine alphabetische Ansicht mit einem grauen Hintergrund. Es scheint einen Ereignishandler zu haben, der die Suche beendet, wenn er angetippt wird.

Um den Dimm-Effekt auf Ihre Unteransicht der Detailansicht zu beschränken, müssen Sie drei Dinge tun. (Ich gehe davon aus, dass Ihr Detail-View-Controller über eine Xib definiert ist. Wenn nicht, können diese Schritte auch in Code ausgeführt werden.)

1) Fügen Sie einen neuen UIViewController zu Ihrem Detail-View-Controller xib hinzu. Hängen Sie diesen neuen View-Controller an ein IBOutlet Ihres Detail-View-Controllers an. In meinem Beispiel nenne ich das "_searchAreaViewController". Dies ist wichtig, auch wenn Sie nie auf den View-Controller zugreifen (aber vergessen Sie nicht, Sie müssen ihn irgendwann freigeben)

%Vor%

2) Machen Sie die enthaltene Ansicht für Ihren Suchbereich zur Ansicht dieses neuen View-Controllers. Verwenden Sie dazu den Interface Builder, um einen neuen Referenzierungsausgang für diese Ansicht festzulegen, indem Sie den Ausgang auf searchAreaViewController ziehen und den Ausgang "view" auswählen. Sie müssen eine umschließende Ansicht haben - sie sollte eine Unteransicht Ihrer Detailansicht sein und sollte die UISearchBar und wahrscheinlich Ihre UITableView enthalten.

3) Die Eigenschaft searchContentsController des UISearchDisplayController verweist auf diesen neuen View-Controller anstelle des Detail-View-Controllers. Dies kann nur über den Interface Builder erfolgen, da die Eigenschaft schreibgeschützt ist (IB hat etwas Zauberhaftes, um dies zu ermöglichen?) Wenn Sie diesen Schritt über Code machen müssen, müssen Sie den UISearchDisplayController ableiten und den korrekten Wert von a zurückgeben property override von "searchContentsController".

Ich habe eine Beispielanwendung erstellt, um dies zu demonstrieren, und die einzige Codezeile, die ich der SplitView-Vorlage hinzufügen musste, war die in Schritt 1 oben aufgeführte. Alles andere fügte einfach die Ansichten / Controller hinzu und verband sie richtig in IB.

viel Glück!

    
TomSwift 08.11.2010, 22:19
quelle
1

iOS 8 +

%Vor%

iOS 7

%Vor%

Ich weiß, dass UISearchDisplayController vorerst veraltet ist, aber wenn Sie es noch verwenden müssen, können Sie Ihr Problem mit einer Codezeile perfekt lösen. Fügen Sie es zur ViewDidLoad-Methode hinzu.

    
Nikolay Tabunchenko 19.10.2015 17:32
quelle
0

Könntest du klarstellen, was du unter "Suchleiste verwenden" und "alles vorhanden dimmen" meinest? Ich interpretiere das, was Sie geschrieben haben, so dass die Tastatur erscheint, wenn Sie Text in das Textfeld der Suchleiste eingeben. Und an dieser Stelle ist die Detailansicht abgeblendet, was eine Benutzerinteraktion verhindert.

Die Ursache ist, dass die Suchleiste einen modalen Dialog implementiert, der die Interaktion des Benutzers mit der Ansicht verhindert, solange die Tastatur angezeigt wird. Leider scheint es keine Möglichkeit zu geben, die Suchleiste zu konfigurieren, um dieses Verhalten zu verhindern. Auf der anderen Seite bin ich nicht sicher, dass der Benutzer dieses Verhalten nicht erwartet, da die Suchbalken konsistent modal sind und sich unter iOS im Allgemeinen so verhalten.

Ich habe zwei Workarounds ausprobiert:

1.) Es gibt eine Eigenschaft von UIViewController namens modalPresentationStyle , die genau das Verhalten erzeugt, das Sie beschreiben, wenn es den Wert UIModalPresentationFormSheet hat ("Alle nicht abgedeckten Bereiche sind abgeblendet, damit der Benutzer nicht mit ihnen interagieren kann). "Informationen finden Sie in der Apple-Dokumentation . Wenn Sie diese Eigenschaft jedoch auf andere Werte setzen, ändert sich das Ergebnis nicht (zumindest für mich hat es nicht funktioniert).

2.) Sie müssten Ihren eigenen nicht-modalen Suchbalken ersetzen, da ein standardmäßiges UITextField nicht modal ist und somit keine anderen UI-Elemente verdunkelt. Dieser Ansatz funktioniert, aber Sie benötigen möglicherweise etwas mehr Arbeit, damit es wie eine "normale" Suchleiste aussieht. Aber da sich diese Suchleiste anders verhält als die modalen normalen Suchleisten in iOS, ist dies möglicherweise nicht das, was die Benutzer erwarten.

    
user8472 08.11.2010 22:56
quelle
0

Ich weiß, dass ich zu spät bin und das hier ist eine schreckliche Idee, aber 'setHidden: No' hat nicht für mich funktioniert.

%Vor%     
avowalscribe 08.03.2015 13:43
quelle

Tags und Links