Domanda

Attualmente sto sviluppando una semplice applicazione per iPhone utilizzando una UITabBar e viste della tabella per la visualizzazione dei dati. La barra delle schede contiene 8 sezioni, ognuna contenente la stessa vista ma utilizzando un'origine dati diversa, anche il titolo della vista tabella è diverso, ma a parte questo le viste sono le stesse.

Vorrei usare lo stesso viewcontroller per ogni vista, con opzioni per impostare l'origine dati e il titolo della tabella, invece di scrivere 8 diversi viewcontroller con differenze minime. Sarebbe possibile e, soprattutto, come sarebbe possibile?

Aggiorna
Ho funzionato fino a un certo punto, usando il codice pubblicato da Ole Begemann. Tuttavia, mi sono reso conto che la mia domanda iniziale mescolava un po 'di gergo. UITableViewDataSource è un protocollo ufficiale e fa troppo per quello che sto cercando di realizzare. Ho solo bisogno della logica per impostare tabelle una volta, i dati per popolare la vista tabella sono l'unica cosa che è diversa. Che cosa intendevo per " origine dati " era solo un dizionario di oggetti che potevano essere utilizzati dalle mie funzioni UITableView del mio viewcontroller.

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

Come posso passare questo dizionario dal delegato a UITableViewController?

È stato utile?

Soluzione

Come Daniel dice , puoi crearne altrettanti istanze dello stesso controller di visualizzazione desiderato e quindi assegnare queste istanze alle schede del controller della barra delle schede.

Il codice potrebbe apparire così (creo solo 3 istanze qui):

// 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];

Altri suggerimenti

Certo che è possibile, per uno è possibile creare un'istanza del controller di visualizzazione tutte le volte che ud come con origini dati diverse ... Seguiresti la stessa procedura che avresti se avessi controller di visualizzazione diversi per ogni scheda ...

Puoi usare UIToolBar con tutti i pulsanti che desideri e chiamare reloadData su ogni pulsante con parametri diversi.

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