2012-06-12 3 views
5

내 셀에 textView가 있고 테이블 뷰 스크롤 중에 일부 이상한 호출이 발생합니다. 시스템 내 textView 첫 번째 응답자를 확인하십시오. 나는이 전화가 원치 않는 행동을 할 발견했습니다 :이라고 이유를Objective-c 하위 형식이있는 대리자를 재정의합니다.

#0 -[UITextView canBecomeFirstResponder]() 
#1 -[UIView(Hierarchy) deferredBecomeFirstResponder]() 
#2 -[UIView(Hierarchy) _promoteDescendantToFirstResponderIfNecessary]() 

내가 찾을 수 없습니다를, 그래서 나는 UITextView- canBecomeFirstResponder 최우선을 확장하여 처리하려고했습니다.

#import <UIKit/UIKit.h> 

@protocol TextViewDelegate; 

@interface TextView : UITextView 

@property (nonatomic, assign) id<TextViewDelegate> delegate; 

@end 

@protocol TextViewDelegate <UITextViewDelegate> 

- (BOOL)canBecomeFirstResponder:(TextView *)textView; 

@end 

그리고하는 .m :

#import "TextView.h" 

@implementation TextView 

@synthesize delegate; 

- (BOOL)canBecomeFirstResponder 
{ 
    return [self.delegate respondsToSelector:@selector(canBecomeFirstResponder:)] ? [self.delegate canBecomeFirstResponder:self] : NO; 
} 

@end 

이 솔루션은 내가 경고를 가지고 내가 왜 모르는 줄 @property (nonatomic, assign) id<TextViewDelegate> delegate;에 있지만 작동

여기 내 .H입니다. 그것은 Property type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'라고합니다.

왜 시스템이 텍스트 뷰 응답기를 만들고 싶지 않습니까? 왜 내가이 경고를받는거야? 저보다 나은 해결책이 있습니까?

답변

4

잘 모르겠지만 미리 컴파일러가 TextViewDelegate에 대해 알고 있지만 아직이 프로토콜이 UITextView 프로토콜을 상속한다는 사실을 알지 못해 의심스러운 것으로 판단됩니다. 위의 내용을 다음과 같이 선언하십시오.

@class TextView; 

@protocol TextViewDelegate <UITextViewDelegate> 

- (BOOL)canBecomeFirstResponder:(TextView *)textView; 

@end 

@interface TextView : UITextView 

@property (nonatomic, assign) id<TextViewDelegate> delegate; 

@end 

그러나 질문을 이해할 수 있는지 확실하지 않습니다. 테이블이 있고 하나 이상의/각 셀에 UITextView이 있으십니까? 텍스트보기를 편집 할 수 있도록 하시겠습니까? 간단히 설정할 수 있기 때문에

희망이 도움이 될 것입니다.

감사합니다,

조지

+1

나는이 편집 가능한 속성을 설정하려했지만 그것은 또한 inputAccessoryView'이 때문에이'inputAccessoryView' 보여줍니다 첫 번째로 반응이되면 '이있다. 이 객체에 대한 첫 번째 응답자가되는 것을 제어하려고합니다. 어쨌든, 당신의 답은 정확합니다. 정보가없는 프리 컴파일러를 사용하는 것은 수치 스럽습니다 ... – user500

관련 문제