2009-11-24 21 views
2

Je gère le code dans UITextViewDelegate. Chaque fonction il reçoit l'instance UITextView qui a reçu l'événement, par exemple:Comment obtenir un UIViewController avec UITextView?

 
- (void)textViewDidBeginEditing:(UITextView*)textView 
{ 

} 

Dans cette méthode cependant que compte tenu de la textView, je dois accéder au UIViewController qui contient le textView.

En utilisant textView.superview (même plusieurs étapes de celui-ci) ne semble pas fonctionner - je ne reçois que:

  • textView.superview = une instance de UIView
  • textView.superview.superview = UIViewControllerWrapperView
  • textView.superview.superview.superview = UINavigationTransitionView
  • textView.superview.superview.superview.superview = UILayoutContainerView
  • textView.supervi ew.superview.superview.superview.superview = UIWindow
  • textView.superview.superview.superview.superview.superview.superview = nul

J'ai trouvé les noms de classe en imprimant quelque chose comme

 
printf("class: %s\n", [[[uiv class] description] UTF8String]) ; 

Répondre

4

Il n'y a aucun moyen de le faire. Un UIViewController sait quel UIView il gère, mais une vue n'a pas de référence vers son contrôleur de vue (et peut même ne pas avoir un contrôleur de vue).

La méthode -superview renvoie un autre UIView, ce qui n'est pas la même chose qu'un UIViewController.

Pourquoi avez-vous besoin du contrôleur de vue? Qu'est-ce que vous essayez d'accomplir?

En aparté, vous pourriez vous épargner quelques frappes à l'aide NSLog au lieu de printf:

NSLog(@"class: %@", [uiv class]); 
2

Par curiosité, pourquoi pas votre contrôleur de vue agissant en tant que UITextViewDelegate? Dans la plupart du code que j'ai vu (y compris le mien), les contrôleurs de vue eux-mêmes ont tendance à agir en tant que délégués.

Si vous devez extraire cette fonctionnalité dans une classe distincte, le contrôleur de vue peut peut-être lui transmettre une référence à UITextViewDelegate.

+0

Hmm, bon point. Peut-être que mon viewcontroller DEVRAIT agir comme UITextViewDelegate. Je ne pensais pas que quand je commencerais à faire cela aiderait, mais vraiment, ici ça serait :) – bobobobo