2010-03-16 6 views
12

J'essaie d'utiliser un UITableView sans utiliser une plume et sans utiliser un UITableViewController.comment définir un délégué tableview

J'ai ajouté une instance UITableView à un UIViewController Like So

mytable = [[UITableView alloc] initWithFrame:CGRectMake(22, 207, 270, 233)]; 
[mytable setDelegate:self]; 
[self.view mytable]; 

Aussi j'ai ajouté les méthodes d'affichage de tableau suivant à mon UIViewController (coupe pour l'amour de brevities)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

Je reçois un avertissement indiquant que mon UIViewController n'implémente pas le protocole de délégué UITableView.

Quelle est la bonne façon de dire à la table où ses méthodes de délégué sont?

(Ceci est ma première tentative d'essayer d'utiliser un UITableView sans sélectionner le contrôleur UITableTableview des nouvelles options de fichier)

Répondre

29

Vous devez respecter votre classe aux UITableViewDelegate et UITableViewDataSource protocoles. (cellForRowAtIndexPath: est dans le protocole UITableViewDataSource)

faire en utilisant les supports d'angle dans la définition de l'interface de classe:

@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {...} 

La raison pour laquelle vous obtenez cet avertissement maintenant et pas avant lorsque vous utilisez un UITableViewController est car UITableViewController est déjà conforme à ces protocoles. Par conséquent, UITableViewController est simplement une classe qui est conforme à UITableViewDelegate et UITableViewDataSource, et a un membre d'instance UITableView. C'est à peu près tout.

Bien sûr, si vous n'êtes pas déjà UITableViewController le sous-classement, vous devez configurer manuellement le dataSource et delegate du UITableView:

[tableView setDelegate:self]; 
[tableView setDataSource:self]; 
+0

o.k merci les gars, cela a fait disparaître l'erreur. Je suppose que l'utilisation <..> est quand vous voulez implémenter plus d'une interface? J'ai toujours un problème, aucune de mes méthodes de table n'a été appelée. [table reloadData] n'a aucun effet et ma méthode didSelectRowAtIndexPath ne s'exécute pas lorsque je clique sur une cellule. Pouvez-vous penser à autre chose que je pourrais manquer? – dubbeat

+1

Peu importe, j'ai oublié de mettre aussi la source de données ainsi que le délégué – dubbeat

1

L'avertissement est tout simplement vous dire que votre section @interface devrait déclarer que vous mettre en œuvre le protocole UITableViewDelegate:

@interface MyUIViewController : UIViewController <UITableViewDelegate> 
16

vous devez également définir le délégué dataSource à l'auto:

[tableView setDelegate:self]; 
[tableView setDataSource:self]; 

ou, tout aussi:

tableview.delegate = self; 
tableview.dataSource = self; 
+0

Quelle est la différence? – RGriffiths

+1

@RichardGriffiths La différence est purement stylistique. Les deux sont setters et accomplissent la même chose. –

1
[tableview setDataSource:self] 

Vous devez donner définitivement, pourquoi à cause des deux nécessaires méthodes de UITableView sont sous protocole UITableViewDataSource.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section; 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; 
0

En swift3 Voici comment vous définissez UITableViewDelegate:

class FeedsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
     @IBOutlet weak var feedsTableView: UITableView! 
     override func viewDidLoad() { 
      super.viewDidLoad() 

      feedsTableView.delegate = self 
      feedsTableView.dataSource = self 

      // Do any additional setup after loading the view. 
     } 
} 
Questions connexes