Comment appeler la méthode qui aurait été appelé si le délégué était pas là

voix
3

Je suis une méthode de la mise en œuvre délégué en option sur l'API Cocoa Touch. Ce que je voudrais faire est, d' abord appeler la méthode qui aurait a été appelé si je ne le délégué ... mettre en œuvre puis apporter des modifications au résultat ... puis retourner ma version modifiée.

Voici un exemple:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; {
  /* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section];
  [headerView setBackgroundColor:[UIColor redColor]];
  return headerView;
}

La ligne marquée ne fonctionne pas. Je pourrais mettre someObject = tableView.delegate, mais cela me donne juste une récursion infinie. Est-il un truc pour faire le tableView faire ce qu'il ferait si la méthode facultative n'a pas été mis en œuvre? Je ne suis pas super bon espoir, mais ce serait cool si possible.

Créé 27/08/2009 à 03:51
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
6

Il n'y a pas de méthode qui aurait été appelé si vous ne l'avez pas mettre en œuvre le délégué. Les délégués ne sont pas comme les sous-classes; ils ne sont pas une caractéristique de la langue. Le UITableView (dans ce cas), fait un peu de travail, cherche à voir si sa propriété -delegate est non nulle (qui est juste un Ivar aléatoire qui arrive à être appelé « délégué »), si elle voit si le délégué met en œuvre le délégué méthode, elle appelle si elle ne, fait alors un peu plus de travail.

UITableView ne pas exposer une vue d'en-tête de section par défaut (il est une sous-classe privée appelée UISectionHeaderCell je crois), donc Apple ne fait pas de promesses sur la façon dont il est mis en œuvre. ou nous donner une bonne façon d'obtenir Ahold de celui-ci Il y a plusieurs façons d'obtenir le point de vue en question, mais Apple ne nous a pas encore donné aucun appui que je connaisse.

Mais à la question générale sur les délégués, ce que vous demandez n'existe pas parce qu'il est pas comment les délégués sont mis en œuvre.

Créé 27/08/2009 à 04:31
source utilisateur

voix
3

Consultez la documentation respondsToSelector- il vous donne la possibilité de tester et de voir si un objet est , bien, répondre au sélecteur :)

Créé 27/08/2009 à 03:57
source utilisateur

voix
2

Je devine que UITableView fait quelque chose comme ceci:

if ([delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
    [delegate tableView:self viewForHeaderInSection:section];
} else {
    // Does its own thing instead
}

Je ne pense pas qu'il serait possible pour vous d'obtenir le l'original, de cette façon.

Créé 27/08/2009 à 03:56
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more