Vai al contenuto

Mostrare i dati du una ricerca


Messaggi raccomandati

Devo realizzare una semplice app che mostri nella view principale un campo di testo e un pulsante.

QUando l'utente digita un testo e preme il pulsante deve partire una richiesta POST verso uno script php che si trova su un mio sito, lo script effettua una ricerca sul db e restituisce i risultati all'app.

Fin qui so fare tutto.

Il mio problema è la gestione delle view.

Dopo aver inviato i dati dalla view principale, come dico all'app di mostrare i dati ricevuti indietro su una nuova view? La view la farò col layout a tabella.

Che tipo di progetto devo scegliere? View o Window based?

Link al commento
Condividi su altri siti

Le view mi sono ancora un po' ostiche da capire.

Dunque: creo un nuovo progetto Navigation-based, questo però mi mostra come prima cosa subito la tabella o no?

Io dovrei prima mostrare una vista con un text field dove inserire una stringa e un pulsante, cliccando sul pulsante parte una richiesta e ricevo dei dati in risposta, solo a questo punto devo mostrare la tabella popolata con questi dati.

Mi spiegheresti come procedere?

Ovviamente non ti chiedo il codice, ma le linee guida.

Link al commento
Condividi su altri siti

Allora... quel template ti crea un MainWindow.xib con soltanto il navigation controller e il "link" a RootViewController.xib

Quello che puoi fare è: elimina RootViewController.xib, .h e .m

Poi.. in MainWindow.xib hai nell'elenco di oggetti istanziati un Navigation Controller, "unfoldalo (triangolino :) )", dentro hai Navigation Bar e RootViewController.

Semplicamente cancella RootViewController e aggiungi (sempre dentro il Navigation Controller) una tua ViewController.

Tutto finito.

Semplicemente poi quando vuoi visualizzare la vista nuova (tabella) devi accedere al navigation controller (mi sembra sia una property della tua nuova vista) e chimare

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

Link al commento
Condividi su altri siti

Provo a descrivere meglio la situazione attuale di ciò che ho, magari viene più facile darmi indicazioni su come proseguire.

Il progetto è di tipo Window-based, si chiama RecuperoInfo.

Nel file RecuperoInfoViewController.m ho questa funzione che invia la richiesta e riceve la risposta

- (IBAction)performSearch:(id)sender {

   NSMutableURLRequest *richiesta = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sito.it/iosphp/responder.php"]
								  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
   [richiesta setHTTPMethod:@"POST"];
   [richiesta setHTTPBody:[[NSString stringWithFormat:@"search=%@", textInput.text] dataUsingEncoding:NSASCIIStringEncoding]];

   NSURLResponse *response;
   NSError *error;
   NSData *dati = [NSURLConnection sendSynchronousRequest:richiesta returningResponse:&response error:&error];

   testo = @"";

   //stringa in formato JSON inviata in risposta dallo script
   NSString *esitoRicerca = [[[NSString alloc] initWithData:dati encoding:NSASCIIStringEncoding] autorelease];

   risultato.text = esitoRicerca; //risultato è una textView sull'unica view che uso al momento, andrà tolta

   //suppongo che qui ci vada una chiamata per passare alla view della tabella passandogli anche i dati ricevuti (esitoRicerca)

}

Da quello che ho capito, ammesso di aver capito bene, alla fine del metodo precedente dovrei dire al file RecuperoInfoAppDelegate.m di passare alla view della tabella, ma come si fa?

Nel frattempo ho aggiunto al progetto i file .h e .m di una classe che fa uso di UITableView che dovrà gestire i dati ricevuti dallo script php per poi mostrarli.

EDIT: hai risposto mentre scrivevo, adesso leggo la tua risposta.

Link al commento
Condividi su altri siti

Provo a descrivere meglio la situazione attuale di ciò che ho, magari viene più facile darmi indicazioni su come proseguire.

Il progetto è di tipo Window-based, si chiama RecuperoInfo.

Nel file RecuperoInfoViewController.m ho questa funzione che invia la richiesta e riceve la risposta

- (IBAction)performSearch:(id)sender {

   NSMutableURLRequest *richiesta = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sito.it/iosphp/responder.php"]
								  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
   [richiesta setHTTPMethod:@"POST"];
   [richiesta setHTTPBody:[[NSString stringWithFormat:@"search=%@", textInput.text] dataUsingEncoding:NSASCIIStringEncoding]];

   NSURLResponse *response;
   NSError *error;
   NSData *dati = [NSURLConnection sendSynchronousRequest:richiesta returningResponse:&response error:&error];

   testo = @"";

   //stringa in formato JSON inviata in risposta dallo script
   NSString *esitoRicerca = [[[NSString alloc] initWithData:dati encoding:NSASCIIStringEncoding] autorelease];

   risultato.text = esitoRicerca; //risultato è una textView sull'unica view che uso al momento, andrà tolta

   //suppongo che qui ci vada una chiamata per passare alla view della tabella passandogli anche i dati ricevuti (esitoRicerca)

}

Da quello che ho capito, ammesso di aver capito bene, alla fine del metodo precedente dovrei dire al file RecuperoInfoAppDelegate.m di passare alla view della tabella, ma come si fa?

Nel frattempo ho aggiunto al progetto i file .h e .m di una classe che fa uso di UITableView che dovrà gestire i dati ricevuti dallo script php per poi mostrarli.

EDIT: hai risposto mentre scrivevo, adesso leggo la tua risposta.

Direi qualcosa del tipo

- (IBAction)performSearch:(id)sender {

   NSMutableURLRequest *richiesta = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sito.it/iosphp/responder.php"]
								  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:120.0];
   [richiesta setHTTPMethod:@"POST"];
   [richiesta setHTTPBody:[[NSString stringWithFormat:@"search=%@", textInput.text] dataUsingEncoding:NSASCIIStringEncoding]];

   NSURLResponse *response;
   NSError *error;
   NSData *dati = [NSURLConnection sendSynchronousRequest:richiesta returningResponse:&response error:&error];

   testo = @"";

   //stringa in formato JSON inviata in risposta dallo script
   NSString *esitoRicerca = [[[NSString alloc] initWithData:dati encoding:NSASCIIStringEncoding] autorelease];

   MyTableViewController * myTable = [[MyTableViewController alloc] init];
   myTable.response = esitoRicerca;
   [self.navigationController pushViewController:myTable animated:YES];
   [myTable release];

}

Link al commento
Condividi su altri siti

Grazie, ho aggiunto il tuo codice, modificando il nome della classe che gestisce la table view, ma la view non cambia, resta su quella con text field e pulsante.

Non ho implementato l'elaborazione dei risultati e la loro visualizzazione, ma dovrebbe comunque apparirmi una tabella vuota, giusto?

Link al commento
Condividi su altri siti

Nel TableResultsViewControler.h ho messo questo

#import <UIKit/UIKit.h>

@interface TableViewResults : UITableViewController {
   NSMutableArray *results;
}

@property (nonatomic, retain) NSMutableArray *results;

@end

Nel TableResultsViewControler.m

@synthesize results;

- (void)viewDidLoad {
   [super viewDidLoad];
   self.title = @"Recupero Info";
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
   return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return results.count;
}

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

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
       cell = [[[uITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
   }

   // Configure the cell...

   cell.textLabel.text = [[results objectAtIndex:indexPath.row] valueForKey:@"testo"];
   NSString *path = [NSString stringWithFormat:@"http://www.sito.it/iosphp/img/%@",[[results objectAtIndex:indexPath.row] valueForKey:@"img"]]; //path all'immagine...
   cell.imageView.image = [uIImage imageWithContentsOfFile:path];
   cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

   return cell;
}

Nel file TableResultsViewControler.xib con IB ho impostato dataSource, delegate e view collegandoli al File's owner

C'è qualcosa che mi manca?

Link al commento
Condividi su altri siti

Non mi fa mettere la mia view dentro il Navigation Controller del MainWindow.xib, trascino la view, ma va o sopra o sotto, se non cancello il Root View Controller me la fa mettere là sotto, ma comunque in tal modo non mi funziona.

Visto che ormai hai creato il progetto, me lo manderesti in qualche modo in un file zip?

Così mi vedo cosa c'è che non va col mio senza doverti chiedere ogni secondo perché non mi funziona.

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...