2

UITextView을 상속하는 클래스 MyTextView이 있습니다. 나도 UIViewController의 서브 클래스 인 MyViewController을 가지고있다. MyViewControllerUITextViewDelegate 프로토콜을 구현하며 MyTextView의 대리인으로 설정됩니다.UITextView 하위 클래스로 작업하지 않는 UIScrollViewDelegate 메서드

MyViewControllerUITextViewDelegate (- (void)textViewDidChange:(UITextView *)textView 등)의 일부 대리자 메서드를 구현하며 모두 잘 작동합니다. 그러나 - (void)scrollViewDidScroll:(UIScrollView *)scrollView 또는 일부 또는 다른 스크롤 대리자 메서드를 구현하려고하면 호출되지 않습니다. UITextViewUIScrollView에서 상속 받고 UITextViewDelegate에서 상속되는 내용이 해당 스크롤 방법을 선언하는 UIScrollViewDelegate에 부합하므로 이것이 정상적으로 작동해야한다는 것을 알고 있습니다.

이상한 점은 내가 IB에 들어가서 텍스트보기의 클래스를 MyTextView에서 UITextView으로 변경하면 모든 스크롤 기능이 호출된다는 것입니다.

답변

1

그것은 당신이 지금 당신의 클래스에 개인 새로운 인스턴스 변수가 어떤 의미 것이라고 delegate 재산 합성 재, 합성 접근이 가리키는 가능 그 개인 변수. 그래서 프로퍼티가 아닌 인스턴스 변수에 의해 델리게이트를 참조하는 모든 수퍼 클래스 구현은 통과하지 못합니다 (물론 프로퍼티를 참조하는 클래스는 여전히 서브 클래스 접근자를 호출합니다). 아마 UITextField 속성을 사용하고 UIScrollView 인스턴스를 사용하는 것 같습니다!

+0

당신은 절대적으로 올바른 칼이었습니다. 어떤 이유로 대리인이 MyTextView.m에서 합성되었는데,이 클래스에서 대리자를 선언하지 않았으므로 찾지 못했습니다. 나는 이것이 다른 클래스의 복사/붙여 넣기 문제 였음에 틀림 없다고 생각한다. Cocoa 클래스에서 속성과 인스턴스 변수를 사용할 때 일관성이없는 것 같습니다. 그래서 때로는 그걸 가지고 도망 가려고하고 때로는하지 않습니다. 그것은 나를 혼란스럽게 만들었습니다. – pajevic

+0

아마도 UIScrollView는 대리인을 슈퍼 클래스에 공개하지 않으므로 속성을 통해 엄격하게 참조해야합니다. –

0

저는 이것을 시도하지는 않았지만 프로토콜과 관련이있을 수 있습니까?

이 경우

, 세 번째 대답은 도움이 될 수 있습니다 : How to use custom delegates in Objective-C

+0

글쎄, 나는 커스텀 델리게이트를 만들지 않는다. 그래서 그 질문은 나를 위해 적절하지 않다. 그리고 대리인을 사용하는 방법을 알고 있습니다. 나는 그들을 (코코아/코코아 터치 개발에 상당히 경험이 많다) 시간의 톤을 사용했습니다. 그러나 나는 내가 전에 궁금해했던 행동에 직면하지 않았다. – pajevic

관련 문제