Domanda

Questo è legato a una domanda che ho posto in precedenza, ma alla domanda originale è stata data una risposta. Spero che sia giusto aprire una nuova domanda, in caso contrario, sentiti libero di eliminarla.

Sto cercando di creare una semplice applicazione per iPhone usando le visualizzazioni di tabella e una barra delle schede. Ogni vista è la stessa a livello di programmazione, ad eccezione del titolo e del tipo di dati che devono essere visualizzati. Tranne che si comportano tutti allo stesso modo.

Attualmente il codice nel mio AppDelegate gestisce la distribuzione dei viewcontroller nelle diverse schede e imposta il titolo di conseguenza. Ciò che non riesco a capire, tuttavia, è come passare un array specifico di oggetti (ogni array differisce per scheda) a ciascun viewcontroller distribuito in modo che venga utilizzato da tableview.

Spero che tu mi possa aiutare. Il mio codice è il seguente:

AppDelegate.h

#import <UIKit/UIKit.h>

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
  UIWindow *window;
  UITabBarController *tabBarController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end

AppDelegate.m

#import "RootViewController.h"
#import "MyAppDelegate.h"

@implementation MyAppDelegate.h

@synthesize window, tabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
  NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id", 
                    @"My Name", @"Name", 
                    @"My Type", @"Type",
                    @"My Meta", @"Meta",
                    @"My Excerpt Text", @"Excerpt",
                    @"My Body Text", @"Body",
                    @"icon.jpg", @"Icon", 
                    @"image.jpg", @"Image", nil];

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

  NSArray *tableControllersConfig = [NSArray arrayWithObjects:
                                 [NSDictionary dictionaryWithObjectsAndKeys:@"test1", @"DataSource", @"Title of the Tableview", @"Title", @"icon.png", @"Icon", nil],

  NSMutableArray *tableControllers = [NSMutableArray array];
  for (NSDictionary *configDict in tableControllersConfig) {
    RootViewController *controller = [[RootViewController alloc] initWithNibName:@"TableView" bundle:nil];
    controller.tableView.delegate = controller;
    controller.title = [configDict valueForKey:@"Title"];
    controller.tabBarItem.image = [UIImage imageNamed: [configDict valueForKey:@"Icon"]];
    [tableControllers addObject:controller];
    [controller release];
  }

  self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers];
  [window addSubview:tabBarController.view];
  [row1 release];
  [array release];
}

- (void)dealloc {
    [tabBarController release];
    [window release];
    [super dealloc];
}
@end

RootViewController implementa il protocollo UITableViewDataSource.

È stato utile?

Soluzione

Se il tuo " RootViewController " è l'origine dati di tableView (implementa il protocollo UITableViewDataSource)

Crea un ivar NSArray nella classe RootViewController dicci " tableDataArray " ;,

Crea un nuovo metodo init che includerà un array da conservare in questo ivar:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(NSArray*)tableData {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    // Custom initialization
    tableDataArray = [tableData retain];

}
return self;

}

Utilizzare tableDataArray nei metodi dell'origine dati di tableView.

Quindi, quando crei RootViewController nel tuo ciclo, puoi impostare tableDataArray con il nuovo metodo init e puoi far sì che ognuna delle viste della tabella sia popolata con un array diverso.

spero che questo aiuti

Altri suggerimenti

La risposta dipende dal tuo design.

Se i dati di cui parli rimangono gli stessi da una corsa all'altra, dovresti parcheggiarli nel controller di visualizzazione perché fa parte della configurazione di base delle visualizzazioni di tabella.

Se i dati si evolvono nel tempo, dovresti metterli nel delegato dell'app e quindi utilizzare una sottoclasse del controller di visualizzazione personalizzata con un puntatore a tali dati. Guarda uno dei progetti modello in Xcode che utilizzano i dati di base. La relazione tra le classi è la stessa di quella di cui hai bisogno ma utilizzeresti una matrice anziché un contesto di oggetto gestito.

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