Domanda

Ho creato una tabella raggruppati sulla mia app, e spingendo a nuovi punti di vista funziona bene. Tranne che per una cosa. I titoli e il layout dello stack sono tutti strani. Ecco la ripartizione:

  1. Ho due sezioni in mia tabella.
  2. Quando si tocca in prima fila nella prima sezione, che mi porta alla corretta visione, ma il titolo della nuova vista è il nome della prima riga della seconda sezione della tabella.
  3. A sua volta, la seconda fila nel titolo della prima sezione è la seconda fila nel titolo della seconda sezione.

Se si tocca sulla seconda riga della seconda sezione della tabella vista radice, il pulsante di navigazione passa alla seconda riga della prima della tabella.

Quindi, ecco uno schema del mio tavolo:


Sezione Tabella 1
Riga 1
Row 2
Riga 3

Sezione Tabella 2
Riga A
Riga B
Linea C


Quindi, se ho colpetto sulla riga 3, il titolo della vista spinto è Row C. Il pulsante di navigazione mi dice di tornare a Row 3, poi alla fine fino a raggiungere la visualizzazione di root.

Ecco il mio file di implementazione spingendo i punti di vista:

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

    //CSS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"CSS"])
    {
        CSSViewController *css = [[CSSViewController alloc] initWithNibName:@"CSSViewController" bundle:nil];
        [css setTitle:@"CSS"];
        [self.navigationController pushViewController:css animated:YES];
    }

    //HTML
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"HTML"])
    {
        HTMLViewController *html = [[HTMLViewController alloc] initWithNibName:@"HTMLViewController" bundle:nil];
        [html setTitle:@"HTML"];
        [self.navigationController pushViewController:html animated:YES];
    }

    //JS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"JavaScript"])
    {
        JSViewController *js = [[JSViewController alloc] initWithNibName:@"JSViewController" bundle:nil];
        [js setTitle:@"JavaScript"];
        [self.navigationController pushViewController:js animated:YES];
    }

    //PHP
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"PHP"])
    {
        PHPViewController *php = [[PHPViewController alloc] initWithNibName:@"PHPViewController" bundle:nil];
        [php setTitle:@"PHP"];
        [self.navigationController pushViewController:php animated:YES];
    }

    //SQL
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"SQL"])
    {
        SQLViewController *sql = [[SQLViewController alloc] initWithNibName:@"SQLViewController" bundle:nil];
        [sql setTitle:@"SQL"];
        [self.navigationController pushViewController:sql animated:YES];
    }

e la matrice alimentare dati della tabella:

- (void)viewDidLoad {
    [super viewDidLoad];


    arryClientSide = [[NSArray alloc] initWithObjects:@"CSS",@"HTML",@"JavaScript",nil];
    arryServerSide = [[NSArray alloc] initWithObjects:@"Objective-C", @"PHP",@"SQL",nil];
    // arryResources = [[NSArray alloc] initWithObjects:@"HTML Colour Codes", @"Useful Resources", @"About",nil];
    self.title = @"Select a Language";
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

Qualsiasi aiuto sarebbe molto apprezzato.
Jack

È stato utile?

Soluzione

Credo che vi manca un'istruzione if per determinare quale sezione l'utente bussò. Ricordate che NSIndexPath ha sia una riga e una proprietà di sezione. Io di solito faccio qualcosa di simile:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.section == 0 ) {
  // Do something with arryClientSide
}
if ( indexPath.section == 1 ) {
  // Do something with arryServerSide
}

Sto assumendo che si sta utilizzando una tabella raggruppata.

Saluti, -Dan

Altri suggerimenti

Dan è giusto, è necessario utilizzare la variabile indexPath.section. Sembra che il modo in cui il codice è ora, si sono in realtà spingendo 2 controller di vista dal momento che si dispone di una serie di dichiarazioni individuali se, dopo aver fatto clic "Linea 1" avviene quanto segue:

IsEqual: @ "CSS" restituirà vero,

spingere il controller della vista css,

poi cadere verso il basso e mantenere il controllo (se .. IsEqual: @ "HTML") .. (se .. IsEqual: @ "JavaScript")

quindi abbastanza sicuro (se .. IsEqual: @ "PHP"). Tornerà anche vero e spingere il controller della vista php

Non sono a conoscenza di tutta la vostra applicazione, ma un'osservazione ho notato qui (a parte le perdite di memoria) è che hanno una vista del regolatore / pennino dedicato a ciascuna lingua .. se i controller di vista hanno molto diversi comportamenti / apparenze allora immagino Questo è quello che si deve fare, ma consiglierei cercando di vedere quali sono le somiglianze tra ciascuno di essi e vedere se non è possibile effettuare un unico "LanguageViewController", passano in quale lingua il relativo presunto rappresentare e fare di inizializzazione / impostare le proprietà di il controller della vista basa questa. Questo potrebbe non applicarsi, ma se lo fa ti farebbe risparmiare un sacco di lavoro!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top