Das Suchergebnis des UiSearchDisplayController verfügt über ein anderes Zelllayout und ein anderes Verhalten als durchsuchte Tabelle

StackOverflow https://stackoverflow.com/questions/8333532

Frage

Ich benutze Storyboarding. Ich habe eine UitableView mit einer Prototypzelle. Diese Zelle ist stilvoll "Untertitel". Ich habe einen Übergang von der Zelle zur detaillierten Ansicht hinzugefügt. Wenn der Benutzer auf eine Zelle klopft, öffnet er den entsprechenden Editor ... das funktioniert großartig.

Jetzt habe ich einen UiSearchDisplayController an eine uIsearchBar hinzugefügt, die die Delegierten implementiert hat. Das funktioniert sehr gut.

In der Suchergebnis -Tabelle sind die Zellen jedoch "Standard" und nicht tollbar. Was muss ich tun, um eine Ergebnistabelle zu erhalten, die sich wie die "nicht durchsuchte" Tabelle aussieht?

War es hilfreich?

Lösung 2

Fand das Problem ...

Die Methode

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Ziehte die Zelle aus der Tabelleansicht, die im Ergebnis nicht die Tabelleansicht aus dem Storyboard, sondern das Ergebnisabschnitt aus dem SearchDisplayController enthält.

Ich lasse die Zelle jetzt in beiden Fällen aus der Tischansicht im Storyboard ausstellen und jetzt funktioniert sie.

Andere Tipps

Ich möchte zur Antwort #1 beitragen. Das ist das, was ich getan habe und es hat für mich funktioniert

in der Methode

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Anstatt die Zelle aus der Parameter -Tabellenansicht zuzuweisen

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Weisen Sie es direkt aus der Tabelleansicht in der Ansicht zu, damit Sie dies ersetzen müssen

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

mit diesem

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Ich habe iOS 7.0 und Xcode 5.0 verwendet. Ich habe festgestellt, dass der Suchanzeigecontroller das gleiche TableView -Layout wie der Delegate -Ansichts -Controller verwendet. Alles, was Sie tun müssen, ist zu beurteilen, ob es sich bei der aktuellen Tabellenansicht um die Tabellenansicht des Delegierten -Ansichts -Controllers oder die Tabellenansicht des Suchdiagramms handelt. Aber denken Sie daran, den Satz hinzuzufügen

tableView.rowHeight = self.tableView.rowHeight;

Im folgenden Code -Snippet:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

Wenn Sie vergessen, diesen Satz zu implementieren, ist die Zeile der Tabellenansicht der Suchanzeige nur so hoch wie eine Standardzeile, wodurch Sie denken, dass sie nicht wie die Tabelle "ungerechnet" aussieht.

Darauf gibt es eine mögliche Antwort hier. Es funktioniert vielleicht nicht ganz für Sie, aber wie ich erklärte, erstellt der UiSearchDisplayController die Tabellenansicht.

Überprüfen Sie die Dokumentation und Sie können ein besseres Verständnis dafür bekommen, aber es heißt:

Sie initialisieren einen Suchdisplay -Controller mit einer Suchleiste und einem Ansichtsregler, der für die Durchsuchung des ursprünglichen Inhalts verantwortlich ist. Wenn der Benutzer eine Suche startet, ist der Suchdisplay -Controller dafür verantwortlich, die Suchschnittstelle über die Ansicht des ursprünglichen Ansichtsreglers zu überlagern und die Suchergebnisse anzuzeigen. Die Ergebnisse werden in einer Tabellenansicht angezeigt, die vom Suchanzeigecontroller erstellt wurde. Zusätzlich zum ursprünglichen Ansichtsregler gibt es logisch vier weitere Rollen. Diese werden normalerweise alle von demselben Objekt gespielt, oft der ursprüngliche Ansichtsregler selbst.

In meinem Fall verwendete UiSearchDisplayController den rechten Zelltyp (benutzerdefiniert), aber die Höhe der Zelle war falsch, also musste ich verwenden

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

Methode, um es zu beheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top