2012-09-04 18 views
6

Sono nuovo su iOS e storyboard e ho bisogno di alcuni consigli sui possibili modi di progettare l'architettura della nuova app. Avrò alcuni dati salvati nel database e avrò una pagina UIViewController con solo alcuni pulsanti che hanno alcuni nomi di alcune categorie. Quando diciamo 'Tutto' viene cliccato o 'Business' viene cliccato, recupererà i dati visualizzati in base a quella categoria su un UITableViewController.Come far passare più pulsanti allo stesso controller di visualizzazione?

Ora sono confuso su una parte:

  1. In story board è ha permesso di creare più segues di diversi pulsanti per la stessa classe ViewController? Quindi, se ciò non è consentito, devo creare 6 diverse classi di UITableViewController per realizzare segui per 6 categorie?

  2. E se è consentito eseguire ripetizioni da più pulsanti a un singolo UIViewController, come faccio a inviare un parametro nello storyboard per rendermi conto che ho fatto clic su un pulsante specifico per andare a UIViewController.

Devo fare un costruttore personalizzato nella UITableViewController che prende un parametro e io iniziale che costruttore dagli altri metodi di fare clic sul pulsante? In modo che mostri i risultati in termini di categoria? O c'è un modo in cui lo storyboard lo fa più facilmente?

risposta

8
  1. Certo, puoi farlo.

  2. Dopo aver creato tutti i pulsanti, trascinare il controllo da ciascun pulsante al controller di visualizzazione successivo e creare (ad esempio) un "push" successivo. Successivamente, fare clic sulla grafica di seguito per selezionare il seguito. Passa alla finestra di ispezione Attributi e indica un identificatore, ad esempio "Tutto" o "Affari". Puoi vedere l'identificatore del seguito nel tuo metodo -prepareForSegue: per capire quali passi hanno causato la transizione e quindi quale categoria visualizzare.

Non consiglio questo approccio, però. Non c'è bisogno di creare una mezza dozzina di folletti che fanno esattamente la stessa cosa. Mi piacerebbe utilizzare un'azione che fa scattare un singolo segue invece:

  • Impostare la proprietà tag di ciascun pulsante un valore univoco in modo da poter distinguere tra i tasti.

  • Aggiungere un metodo di azione al primo controller di visualizzazione (quello che gestisce i pulsanti) denominato qualcosa come -(IBAction)switchToCategoryFromButton:(id)sender.

  • Collegare tutti i pulsanti a quella singola azione.

  • attuare l'azione in modo tale che guarda sender.tag di capire quale pulsante è stato premuto, utilizza per determinare quale categoria di caricare, e poi innesca la segue uno all'altro controller della vista a livello di codice.

Avere un singolo seguito attivato da un'azione sembra molto più ordinato di molti segues.Codice per farlo potrebbe essere simile a questo:

- (IBAction)switchToCategory:(UIControl*)sender 
{ 
    // map the tapped button to a category 
    switch (sender.tag) { 
     case kAllButton: { 
      self.category = kAllCategories; 
      break; 
     } 
     case kBusinessButton: { 
      self.category = kBusinessCategory; 
      break; 
     } 
     default: { 
      self.category = kAllCategories; 
      break; 
     } 
    } 

    // start the segue 
    [self performSegueWithIdentifier:kCategorySegue sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // tell the destination view controller what category to display 
    if ([segue.identifier isEqualToString:kCategorySegue]) { 
     [(NextViewController*)segue.destinationViewController setCategory:self.category]; 
    } 
} 
+2

+1 per non creare più segui – Madivad

1

Usa
self.performSegueWithIdentifier ("yourViewSegue", il mittente: mittente) sotto il vostro evento per la gestione click del pulsante mi piace:

@IBAction func redButtonClicked(sender: AnyObject) { 
     self.performSegueWithIdentifier("redView", sender: sender) 
    } 

redView è il seguente identificatore.

È possibile utilizzare la stessa funzione per la gestione degli eventi del pulsante. & è in grado di distinguere il tocco del pulsante assegnandogli tag diversi.

Problemi correlati