Come implementare una barra di ricerca che rimane sempre in primo piano usando UISearchDisplayController in iPhone SDK 3.0

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

Domanda

L'iPhone SDK 3.0 ha questa nuova comoda classe "UISearchDisplayController" che semplifica la creazione di una barra di ricerca, la gestione di tutti gli input dell'utente e la visualizzazione dei risultati della ricerca.

La sto usando per la mia nuova app, ma c'è una cosa che vorrei cambiare:

Come impostazione predefinita, la barra di ricerca dovrebbe essere posizionata nella parte superiore di UITableView che visualizza i risultati della ricerca. Pertanto, quando si scorre l'elenco dei risultati, la barra di ricerca scompare.

Quello che vorrei ottenere è avere la barra di ricerca sempre in primo piano e durante lo scorrimento di TableView, la barra di ricerca dovrebbe rimanere dov'è. (Motivo per questo: nella mia app a volte ci sono molti risultati di ricerca, quindi a volte l'utente deve scorrere un po 'verso il basso e quando si rende conto che deve cambiare la sua stringa di ricerca, non voglio costringerlo a scorrere fino in fondo)

Quello che ho già fatto è stato aggiungere la barra di ricerca alla vista di UINavigationController che è la "vista padre" della mia vista tabella, invece di aggiungerlo direttamente alla vista tabella:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

searchBar = [[UISearchBar alloc] init];
searchBar.delegate = self;

[searchBar sizeToFit];
CGFloat searchBarHeight = [searchBar frame].size.height;
CGRect mainViewBounds = delegate.navController.view.bounds;
[searchBar setFrame:CGRectMake(CGRectGetMinX(mainViewBounds),
                             CGRectGetMinY(mainViewBounds) + 20,
                             CGRectGetWidth(mainViewBounds),
                             searchBarHeight)];
searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;

[delegate.navController.view addSubview: searchBar];

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self];
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

... ma qui il mio problema è che la vista tabella rimane dietro la barra di ricerca e c'è sempre la prima TableViewCell dei risultati della ricerca, che è nascosta dietro la mia barra di ricerca.

Esiste un modo per ridimensionare UITableView del mio UITableViewController in modo permanente, in modo che inizi proprio sotto la barra di ricerca?

E c'è un altro problema: ogni volta che tocco la barra di ricerca, UISearchDisplayController nasconde automaticamente la barra di navigazione e ridimensiona UITableView (si espande verso l'alto), quindi penso che a questo punto UISearchDisplayController avrà un grosso problema con il mio TableView su misura ...

Grazie mille per l'aiuto !!

È stato utile?

Soluzione

Non ho una soluzione dalla parte superiore della mia testa, ma dirò che la preoccupazione che hai sembra minimizzata dalla possibilità per l'utente di toccare semplicemente la parte superiore dello schermo e fare zoomare il tavolo verso l'alto (per modificare i termini di ricerca se è sbagliato).

Altri suggerimenti

La mia soluzione generale per avere bit nella pagina che non voglio scorrere, è avere UITableView dentro un'altra vista. Quella vista esterna contiene due cose: una barra in alto e una tabella leggermente più corta della pagina intera sotto di essa.

@interface:

UISearchDisplayController < UISearchBarDelegate > *searchDisplayController;

@implementation:

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self];

searchDisplayController.delegate = self;
searchBar.delegate = searchDisplayController;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;

Inserisci questo codice nel tuo TableViewController:

self.tableView.frame = CGRectMake(0,searchDisplayController?.searchBar.bounds.size.height,320,480);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top