Frage

Ich entwickle derzeit eine einfache iPhone-Anwendung eine UITabBar und Tabellenansichten für die Anzeige von Daten verwendet werden. Die Tabbar enthält 8 Abschnitte, die jeweils die gleiche Ansicht, jedoch mit einer anderen Datenquelle, der Titel der Tabellendarstellung verwendet, ist auch anders, aber abgesehen davon, dass die Ansichten die gleichen sind.

Ich mag den gleichen Viewcontroller für jede Ansicht verwenden, mit Optionen, um die Datenquelle und Tabellentitel zu setzen, anstelle von 8 separaten Viewcontrollers mit minimalen Unterschieden zu schreiben. Wäre das möglich, und, was noch wichtiger ist, wie wäre das möglich?

Aktualisieren
Ich habe es zu einem gewissen Grad arbeitet, mit dem Code von Ole Begemann geschrieben. Ich erkannte jedoch, dass meine erste Frage etwas Jargon verwechselt. UITableViewDataSource ist ein offizielles Protokoll und tut zu viel für das, was ich versuche zu erreichen. Ich brauche nur die Logik Tabellen einmal einzurichten, die Daten der Tabellenansicht zu füllen ist das einzige, was anders ist. Was ich mit „Datenquelle“ gemeint war nur ein Wörterbuch von Objekten, die durch meine die UITableView Funktionen meiner Viewcontroller verwendet werden könnten.

NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id", 
                    @"The Name", @"Name", 
                    @"Post", @"Type",
                    @"09-09-2009", @"Meta",
                    @"This is the excerpt, @"Excerpt",
                    @"This is the body text", @"Body",
                    @"icon.jpg", @"Icon", 
                    @"image.jpg", @"Image", nil];

NSArray *array = [[NSArray alloc] initWithObjects:row1, nil];

Wie kann ich dieses Wörterbuch von den Delegierten übergeben an die UITableViewController?

War es hilfreich?

Lösung

Wie Daniel sagt , Sie so viele erstellen Instanzen desselben view-Controller, wie Sie mögen und dann diese Instanzen auf die Registerkarten des Tab-Leiste Controller zuweisen.

Der Code könnte wie folgt aussehen (ich schaffe nur drei Instanzen hier):

// Create an array of dictionaries that holds the configuration for the table view controllers.
// Assuming tableXDatasource are existing objects that conform to the UITableViewDataSource protocol.
NSArray *tableControllersConfig = [NSArray arrayWithObjects:
    [NSDictionary dictionaryWithObjectsAndKeys:table1Datasource, @"datasource", @"Table 1", @"title", nil],
    [NSDictionary dictionaryWithObjectsAndKeys:table2Datasource, @"datasource", @"Table 2", @"title", nil],
    [NSDictionary dictionaryWithObjectsAndKeys:table3Datasource, @"datasource", @"Table 3", @"title", nil],
    nil];

// Create the table view controller instances and store them in an array
NSMutableArray *tableControllers = [NSMutableArray array];
for (NSDictionary *configDict in tableControllersConfig) {
    // Assuming MyTableViewController is our custom table view controller class
    MyTableViewController *controller = [[MyTableViewController alloc] initWithNibName:@"MyTableViewController" bundle:nil];
    controller.tableView.delegate = controller;
    controller.tableView.dataSource = [configDict valueForKey:@"datasource"];
    controller.title = [configDict valueForKey:@"title"];
    [tableControllers addObject:controller];
    [controller release];
}

// Assign the array of table view controllers to the tab bar controller
self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers];

Andere Tipps

Sicher seine möglichen, für die Sie die View-Controller so oft instanziiert als ud mit verschiedenen Datenquellen wie ... würden Sie nach dem gleichen Verfahren, die Sie würden, als ob Sie für jede Registerkarte diffrent View-Controller hatten ...

Sie können UIToolbar verwenden, um mit allen möglichen Knöpfen Sie wollen, und rufen reload auf jede Taste klicken mit unterschiedlichen Parametern.

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