Frage

Ich habe eine gruppierte Tabelle auf meine App einrichten und neue Ansichten funktioniert schieben. Außer eine Sache. Die Titel und Stack-Layout sind alle seltsam. Hier ist die Aufteilung:

  1. Ich habe zwei Abschnitte in meinem Tisch.
  2. Wenn ich in der ersten Reihe im ersten Abschnitt tippen, es nimmt mich auf die richtige Ansicht, aber der Titel der neuen Ansicht ist der Name der ersten Reihe im zweiten Abschnitt der Tabelle.
  3. Im Gegenzug die zweite Zeile in dem Titel des ersten Abschnitts ist die zweite Zeile in dem Titel des zweiten Abschnitts.

Wenn ich in der zweiten Reihe im zweiten Abschnitt der Stammansicht Tabelle tippen, geht die Navigationstaste, um die zweite Reihe in der ersten der Tabelle.

Also hier ist ein Diagramm meiner Tabelle:


Tabelle Abschnitt 1
Zeile 1 | Row 2
Zeile 3

Tabelle Abschnitt 2
Reihe A
Row B
Zeile C


Also, wenn ich tippen Sie auf Zeile 3, der Titel der geschoben Ansicht Reihe C. Die Navigationstaste sagt mir 3 Row zurück zu gehen, dann schließlich an der Wurzel Ansicht enden.

Hier ist meine Implementierung Datei drückt die Ansichten:

- (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];
    }

& das Array die Daten der Tabelle Fütterung:

- (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;
}

Jede Hilfe wäre stark geschätzt.
Jack

War es hilfreich?

Lösung

Ich denke, Sie eine if-Anweisung fehlen die Benutzer zu bestimmen, welcher Abschnitt geklopft. Denken Sie daran, dass NSIndexPath hat sowohl eine Reihe und einen Abschnitt Eigenschaft. Ich mache so etwas wie dies in der Regel:

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

Ich gehe davon aus Sie eine gruppierte Tabelle verwenden.

Cheers, -dan

Andere Tipps

Dan richtig ist, müssen Sie die indexPath.section Variable verwenden. Es scheint so, wie Ihr Code jetzt, Sie sind Controller tatsächlich drängen 2 Ansicht, da Sie eine Reihe von individuellen if-Anweisungen haben, nachdem Sie „Zeile 1“ folgendes klicken passiert:

isEqual: @ "CSS" wird return true,

drücken Sie die CSS-View-Controller,

fällt dann nach unten und halten überprüfen (wenn .. isEqual: @ "HTML") .. (wenn .. isEqual: @ "JavaScript")

dann sicher genug (wenn .. isEqual: @ "PHP"). Auch true zurück und die PHP-View-Controller drücken

Ich bin mir nicht bewusst, Ihre gesamte Anwendung, sondern eine Beobachtung bemerke ich hier (neben Speicherlecks) ist, dass Sie einen Blick haben Controller / nib auf jede Sprache gewidmet .. wenn die View-Controller haben sehr unterschiedliche Verhaltensweisen / Erscheinungen dann ich denke, das ist, was Sie zu tun haben, aber ich würde empfehlen, die Initialisierung / stellen Sie die Eigenschaften der Versuch zu sehen, was die Ähnlichkeiten zwischen jedem und sehen, ob Sie nicht einen einzigen „LanguageViewController“ machen kann, übergeben ihre in welcher Sprache soll darzustellen und zu tun view-Controller basiert weg dass. Dies könnte nicht gelten, aber wenn es funktioniert wäre es Ihnen eine Menge Arbeit sparen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top