2012-06-12 18 views
5

Tengo textView en mi celda y algunas veces durante el desplazamiento de TableView ocurren algunas llamadas extrañas. El sistema hace que mi primera respuesta textView. He encontrado estas llamadas hacen un comportamiento no deseado:Delegado de anulación de Objective-c con su descendiente tipo

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

no puedo averiguar por qué son estos, llamada, por lo que he tratado de hacer frente a esta extendiendo y UITextView primordial - canBecomeFirstResponder.

Aquí es mi .h:

#import <UIKit/UIKit.h> 

@protocol TextViewDelegate; 

@interface TextView : UITextView 

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

@end 

@protocol TextViewDelegate <UITextViewDelegate> 

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

@end 

Y .m:

#import "TextView.h" 

@implementation TextView 

@synthesize delegate; 

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

@end 

Esta solución funciona, pero en la línea @property (nonatomic, assign) id<TextViewDelegate> delegate; Tengo advertencia y no sé qué. Dice Property type 'id<TextViewDelegate>' is incompatible with type 'id<UITextViewDelegate>' inherited from 'UITextView'.

Entonces, ¿por qué el sistema quiere hacer que el equipo de primera respuesta de TextView no lo haga? ¿Por qué recibo esta advertencia? ¿Hay una solución mejor que la mía?

Respuesta

4

No estoy seguro, pero sospecho que la advertencia se debe a que el precompilador conoce TextViewDelegate pero aún no sabe que este protocolo hereda el protocolo UITextView. Simplemente lo declaro arriba así:

@class TextView; 

@protocol TextViewDelegate <UITextViewDelegate> 

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

@end 

@interface TextView : UITextView 

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

@end 

Pero no estoy seguro de entender la pregunta. Tiene una tabla y en una/más/cada celda tiene un UITextView, ¿correcto? ¿Desea que la vista de texto sea editable? Porque simplemente puede establecer [textView setEditable:FALSE];

Espero que esto ayude.

Saludos,

George

+1

que habían tratado de establecer esta propiedad editable pero también tiene 'inputAccessoryView' por lo que cuando se convierte primero en responder esta' inputAccessoryView' muestra. Solo quiero tomar el control de ser el primer respondedor en este objeto. De todos modos, estás en lo correcto con tu respuesta. Esa cosa con precompilador desinformado es vergüenza ... – user500

Cuestiones relacionadas