2010-05-07 4 views
0

Sa commune pour la source de données et délégué pour être le même objet, son aussi commun pour cet objet d'être le viewController.Configuration d'un délégué indépendant?

Dans tous les info/tutoriels que j'ai vu en ligne, les délégués sont toujours configurés comme ci-dessus. Si je voulais créer ma propre classe à la place quelqu'un peut-il me donner des indications sur la façon dont je pourrais le faire. Où cet objet est-il instancié, comment connecter la source de données et déléguer des éléments, etc. J'utilise UITableView pour le tester.

Répondre

0

Il y a vraiment deux réponses à cette question:

1) Si tous les tutoriels font d'une façon, pourquoi une autre? 2) Un délégué UITableView est n'importe quel objet conforme au protocole UITableViewDelegate

2) Un délégué UITableView est un objet qui se conforme au protocole UITableViewDelegate. Vous le créeriez comme ça. . . En supposant que MyTableViewDelegate a implémenté le protocole UITableViewDelegate.

0

Vous devez simplement définir la source de données et déléguer les propriétés de votre UITableView aux objets que vous souhaitez utiliser pour ces rôles. Assurez-vous que votre nouvelle classe implémente les protocoles UITableViewDelegate et UITableViewDataSource dans son fichier d'en-tête:

@interface MyTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

Si vous allouez cet objet dépend de l'architecture de votre application. L'objet pourrait être contenu dans un fichier NIB ou il pourrait être attribué en même temps que vous allouez le contrôleur de table ou dans la méthode viewDidLoad du contrôleur qui alloue votre table:

// Create the delegate object and retain a reference to it 
MyTableDelegate *tableDelegate = [[MyTableDelegate alloc] init]; 
self.tableDelegate = tableDelegate; 

Ensuite, par exemple, si vous utilisent un contrôleur de navigation, vous pourriez donc quelque chose comme ceci pour créer votre table et le pousser sur la pile:

// Create the table view controller 
MyTableViewController *viewController = [[MyTableViewController alloc] initWithNibName:@"MyTableView" bundle:nil]; 

// Set the delegate and data source 
viewController.tableView.delegate = tableDelegate; 
viewController.tableView.dataSource = tableDelegate; 

// push the table view controller onto the naviagtion controller stack 
[[self navigationController] pushViewController:viewController animated:YES]; 

// Clean up resources 
[viewController release]; 

le must de classe MyTableDelegate contient au minimum les méthodes obligatoires:

tableView:cellForRowAtIndexPath 
tableView.numberOfRowsInSection 
Questions connexes