2009-11-24 8 views
2

UITextViewDelegate에서 코드를 처리하고 있습니다. 각 기능은 예를 들어, 이벤트를받은 UITextView의 인스턴스가 수신 : 그 방법 내부UITextView가 지정된 UIViewController를 얻으려면 어떻게해야합니까?

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

} 

그러나, 단지 주어진 텍스트 뷰, 나는 텍스트 뷰가 들어있는 UIViewController에 액세스해야합니다. 하지 않는 것 textView.superview (그것은 심지어 여러 단계)를 사용하여

작동합니다 - 난 단지 얻을 :

  • textView.superview이
  • textView.superview.superview = UIViewControllerWrapperView
  • UIView의의 인스턴스를 =
  • 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 = 전무
내가

 
printf("class: %s\n", [[[uiv class] description] UTF8String]) ; 
같은 뭔가를 인쇄하여 클래스 이름을 발견

답변

4

이렇게 할 방법이 없습니다. UIViewController는 UIView가 관리하는 UI를 알고 있지만 뷰에는 해당 뷰 컨트롤러에 대한 참조가없고 뷰 컨트롤러가없는 경우도 있습니다.

-superview 메서드는 UIViewController와 다른 UIView를 반환합니다.

왜보기 컨트롤러가 필요합니까? 무엇을 성취하려고합니까?

여담으로

, 대신 printf와의 NSLog를 사용하여 자신에게 몇 번의 키 입력을 절약 할 수있다 : 호기심에서

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

을 왜 UITextViewDelegate 역할을보기 컨트롤러가 아닌가요? 내가 본 코드의 대부분에서 (내 자신을 포함하여), 뷰 컨트롤러 자체가 델리게이트 역할을하는 경향이 있습니다.

이 기능을 별도의 클래스로 추출해야하는 경우보기 컨트롤러가 자체에 대한 참조를 UITextViewDelegate로 전달할 수 있습니다.

+0

음, 좋은 지적. 아마도 내 viewcontroller UITextViewDelegate 역할을해야합니다. 나는 그 일을 시작했을 때 도움이 될 것이라고 생각하지 못했지만 실제로는 여기에 있습니다 :) – bobobobo

관련 문제