6

Sto usando un UISearchDisplayController con una UISearchBar. Ho messo questo UISearchBar nella mia app utilizzando IB e ottengo:UISearchDisplayController crea automaticamente un UIPopovercontroller per visualizzare i risultati della ricerca del contenuto?! Come respingerlo?

alt text http://img6.imageshack.us/img6/1985/screenshot20100701at156.png

fine: quando si inizia a taping, il popovercontroller risultato appare magicamente (non ho scritto niente per conto mio per farla apparire!)

Poi, quando una riga viene cliccato tra il risultato, voglio respingere il PopoverController mA in questa fase, non ho mai istanziato l'UIPopoverController dalla mia parte: sembra che se c'è un comportamento incapsulato nel UISearchDisplayController che automaticamente avvolge il suo searchContentsController all'interno di un UIPopoverController. Questo è davvero grande perché tutto funziona perfettamente senza fare nulla, tranne che non riesco a ottenere il riferimento alla presente UIPopoverController a respingerlo :(

Qualcuno sa come ottenere il riferimento a questo "magicamente" creato UIPopoverController? (questo è la prova che l'iPad è davvero un dispositivo "magico";)

Ho pensato che ci sarebbe stato un riferimento a UIPopoverController dal suo contentController (attraverso la sua proprietà padre per esempio), ma non riesco a trovare alcun modo per ottenere un puntatore ad esso:/

+0

Ho anche provato a dimettersi la barra di ricerca come first responder, ma la popover rimane visibile :( – yonel

risposta

11

Il [searchDisplayController setActive:NO animated:YES]; non funziona quindi?

+0

Sai cosa? Ho solo pensato di provarlo ma prima ho controllato se qualcuno rispondeva alla domanda o n SO e sì, hai ragione, funziona! Sono contento di darti il ​​+100 poco prima della scadenza! : p – yonel

+1

Contento di aver potuto aiutare. Non avevo nemmeno controllato che funzionasse, ma guardavo la Documentazione degli sviluppatori di Apple. ;) – jrtc27

+0

Grazie! Questo ha funzionato perfettamente! – ArtSabintsev

0

Puoi aggiungere ulteriori dettagli su come hai E cablato UISearchDisplayController in IB? Non fa nulla di speciale con UIPopoverControllers sull'iPad quindi suppongo tu abbia impostato searchContentsController su un controller che è un UIPopoverController? Se è così, hai già il riferimento di cui hai bisogno, anche se normalmente non è necessario eliminare questa visualizzazione, questa viene ignorata quando annulli la ricerca.

+0

l'UISearchDisplayController non è cablato con qualcosa di speciale: http://bit.ly/ bESjTT Ho caricato un progetto XCode molto semplice che isola solo il caso d'uso su http://bit.ly/aG3qAY È solo l'esempio del progetto del controller della vista Split, con un UISearchDisplayController aggiunto. In questo progetto, nessun UIPopoverController è istanziato:/SearchContentController è impostato su UIViewController e non su UIPopoverCOntroller – yonel

1

Nessuna delle soluzioni di cui sopra ha lavorato per me, ma ho risolto con questo:

cursore
[self.searchDisplayController setActive:NO animated:YES]; 
    [searchBar becomeFirstResponder]; 

In questo modo rimane in campo ma popover è respinta quando non ci sono risultati.

codice completo:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { 
    if ([searchText isEqualToString:@""]) { 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [searchBar becomeFirstResponder]; 
    } 
}