2009-11-17 9 views
9

self.delegate = self; ¿Qué hay de malo en hacer eso? y ¿cuál es la forma correcta de hacerlo?self.delegate = self; ¿Qué hay de malo en hacer eso?

Gracias, Nir.

Código:

(UITextField*)initWith:(id)sender:(float)X:(float)Y:(float)width:(float)hieght:(int)textFieldTag { 
    if (self = [super initWithFrame:CGRectMake(X, Y,width, hieght)]) { 
     finalText = [[NSMutableString alloc] initWithString:@""]; 
     senderObject = sender; 
     self.textColor = [UIColor blackColor]; 
     self.font = [UIFont systemFontOfSize:17.0]; 
     self.backgroundColor = [UIColor whiteColor]; 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
     self.keyboardType = UIKeyboardTypeDefault;  
     self.returnKeyType = UIReturnKeyDone; 
     self.clearButtonMode = UITextFieldViewModeWhileEditing;  
     self.tag = textFieldTag;   
     self.delegate = self;  
     [sender addSubview:self]; 
    } 
    return self; 
} 

Notas: Este es un campo de texto, y cuando me pongo el delegado a otro objeto (self.delegate = MAINVIEW) todo funciona bien, pero entonces tendrá que implementar los métodos delegados en mainView, y me gustaría ponerlos en uno mismo (una clase uiTextField que he creado). Si configuro self.delegate = self, obtengo un textField pero el teclado no aparece.

+0

aclare: ¿Por qué sabe que estoy equivocado? Lo que está pasando –

+0

Hola. Este es un campo de texto, y cuando estoy configurando el delegado para otro objeto (self.delegate = mainView) todo funciona bien, pero luego tendré que implementar los métodos de delegado en mainView, y me gustaría ponerlos en uno mismo (una clase de uiTextField que he creado). Si configuro self.delegate = self, obtengo un textField pero el teclado no aparece. – Tiger

+0

Agregó el comentario de OP a la pregunta. –

Respuesta

12

ver este hilo

http://www.cocoabuilder.com/archive/cocoa/241465-iphone-why-can-a-uitextfield-be-its-own-delegate.html#241505

Básicamente, la razón de la "congelación" cuando se hace clic en su UITextField consigo mismo como delegado es que respondsToSelector se hace llamar -> recursión infinita.

UITextField es único AFAIK. Por lo general, puede utilizar una clase como su propio delegado sin problemas particulares. Para UITextField debe crear un delegado real (que podría, por supuesto, llamar a métodos en el UITextField para el cual es un delegado. Solo tenga cuidado de evitar retener bucles, , incluso si está usando ARC).

+1

FYI: iOS 8 en adelante permite self.delegate = self reference. –

Cuestiones relacionadas