2012-06-23 8 views
6

Non riesco a connettere l'origine dati e delegare i punti vendita della visualizzazione tabella all'interno dello storyboard alla mia classe personalizzata delegata. Vorrei delegare quelle funzioni di tabella a un'altra classe. C'è qualcosa che ho fondamentalmente frainteso riguardo alla delega, ai punti vendita e al cablaggio di tutto in uno storyboard.UITableView origine dati e delega non si connettono a una classe personalizzata

Sfondo

Ho un UIViewController che ha una vista contenente un UIPickerView e tra le altre cose, un UITableView.
Ho raggiunto il punto in cui il mio UIViewController è troppo grande e vorrei spostare le funzioni relative alla tabella in un'altra classe.

Ho creato la seguente classe per contenere quei metodi di tabella come numberOfSectionsInTableView:.

@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

@property (strong, nonatomic) ExerciseDataController *dataController; 

@end 

ho pensato di mettere un riferimento alla classe di cui sopra nel mio UIViewController

@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> 
{ 
    UIPickerView *exercisePicker; 
} 

@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate; 

@end 

Speravo che all'interno della storyboard, quando mi trascina una delle origine dati o delegare le prese di mia tavola vista sullo UITableViewController mi darebbe la possibilità di connettermi alla mia classe delegata. Non è stato così.

Ho quindi provato a creare un oggetto all'interno dello storyboard, assegnandogli la classe ExerciseTableDelegate. Potrei quindi trascinare il delegato della vista tabella sull'oggetto, ma questo non è lo stesso oggetto che ho impostato all'interno del mio AppDelegate.

mia app delegato

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
    ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0]; 

    ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init]; 
    ExerciseDataController *dataController = [[ExerciseDataController alloc] init]; 

    tableDelegate.dataController = dataController; 
    rootViewController.tableDelegate = tableDelegate; 

    // Override point for customization after application launch. 
    return YES; 
} 
  • Devo fare il mio oggetto un singoletto ed ancora inizializzare in il delegato?
  • Devo eseguire questa configurazione nel codice piuttosto che nello storyboard ?
  • La creazione di un oggetto nello storyboard è un'idea sbagliata?

Mi sento vicino ma penso di fare troppo.

risposta

1

Se si desidera accedere all'istanza di ExerciseTableDelegate configurata nell'applicazione delegata, sarà necessario collegarla alla vista tabella in codice, poiché non sarà accessibile dallo storyboard - come te ' trovato, aggiungendo un nuovo oggetto nello storyboard crea una nuova istanza.

Fortunatamente, questo è abbastanza semplice da implementare. Nel metodo del controller vista tabella viewDidLoad, aggiungere il seguente:

self.tableView.delegate = self.tableDelegate; 
self.tableView.datasource = self.tableDelegate; 

Questo si ri-point l'origine dati e delegare all'oggetto separato.

+0

Thankyou @jrturton. Questo ha fatto il trucco. In aggiunta a ciò, avevo bisogno di fare la cosa standard per creare un IBOutlet per la tabella ExerciseViewControllers e necessario per collegarlo nello storyboard. – AllTheThingsICanDo

Problemi correlati