2012-01-18 5 views
7

Czy istnieje możliwość programistycznego zresetowania paska UISearchbar za pomocą narzędzia searchDisplayController, który jest aktywny i zawiera już tekst?Programowanie programowo UISearchbar

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     searchDisplayController.searchResultsTableView.hidden = YES; 
     searchBar.showsCancelButton = NO; 
     [searchBar resignFirstResponder]; 
    } 
} 

To rozwiązanie działa, ale w wyszukiwarce nadal jest tekst. Jeśli dodaję te linie kodu:

searchBar.text = @""; 

Zawsze pozostaje czarny przezroczysty widok.

Jakieś rozwiązania?

+0

spróbować searchBar.text = nil; –

Odpowiedz

6

Tutaj idź. Jest to delegowana metoda wywoływana, gdy użytkownik trafi anulować. Jeśli chcesz podłączyć go w inny sposób, po prostu zadeklaruj swój pasek wyszukiwania jako wylot i podaj go. W każdym razie:

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    searchBar.text = @""; 
    [searchBar resignFirstResponder]; 
} 
+0

Nie rozumiem, jak to powinno działać? Proszę przeczytaj moje zaktualizowane pytanie –

+0

Najlepszym pytaniem w tej chwili jest pytanie, jakiego zachowania szukasz? W moich wyszukiwarkach rzadko korzystam z SB z SRC, używam SB i dbaję o to, jak to jest prezentowane. aby go "zresetować", wtedy dostarczony kod jest wszystkim, czego potrzebujesz.Jeśli chcesz "usunąć to z drogi", używam metody delegata scrollViewWillBeginDragging, aby usunąć klawiaturę i pozwolić użytkownikowi przewijać wyniki. –

+0

Mogę wysłać ci kompletny przykład tego, jak robię rzeczy (na przykład prawie zawsze używam TableView, a nie TableViewController i umieszczam SB w stałej pozycji nad telewizorem, aby był zawsze dostępny). Tak jak powiedziałem, wiedząc dokładnie, jak chcesz wyglądać i jak chcesz, aby to się naprawdę udało, pomóżmy ci lepiej. –

0

nie trzeba wycofać firstResponder

+0

Zaktualizowałem moje pytanie. –

+0

zrezygnować z pierwszej odpowiedzi zwolni klawiaturę. – RyanTCB

0
[self.searchBar resignFirstResponder] 
+1

To rozwiązanie utrzymuje pasek wyszukiwania tak, jak jest i ukrywa klawiaturę. –

0

Można również wyraźnie ukryć resultsTableView, jeśli to, co chcesz:

searchDC.searchResultsTableView.hidden=YES; 

(searchDC jest instancją UISearchDisplayController)

Pomoże Ci to w ukryciu przycisku Anuluj i tym podobnym: http://www.alexandre-gomes.com/?p=418

+0

Wolałbym wyszukiwarkęBar, która jest pusta i nie jest aktywowana -> nie chancelButton –

+0

Zobacz moją zmienioną odpowiedź –

+0

Zobacz moje edytowane pytanie. (-: –

4

całkiem pewny, czego szukasz UISearchDisplayController.active

Z SDK:

@property(nonatomic, getter=isActive) BOOL active 

Jeśli ustawisz tę wartość bezpośrednio, każda zmiana jest wykonywana bez animacji. Użyj setActive: animated: jeśli zmiana stanu powinna być animowana.

Gdy użytkownik ustawia ostrość w polu wyszukiwania zarządzanego paska wyszukiwania, kontroler wyświetlania wyszukiwania automatycznie wyświetla interfejs wyszukiwania. Możesz użyć tej właściwości, aby wymusić pojawienie się interfejsu wyszukiwania.

+0

bardzo dobra odpowiedź dla pierwszego tutaj. Witamy! – brainray

1

Ten wątek jest tak stary, że ma kurz. Wciąż jesteśmy w szybkich więc

<#your UISearchController variable#>.isActive = false