2009-11-17 2 views
9

self.delegate = self; qu'est-ce qui ne va pas en faisant ça? et quelle est la bonne façon de le faire?self.delegate = self; qu'est-ce qui ne va pas en faisant ça?

Merci, Nir.

code:

(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; 
} 

Remarques: Ceci est un champ de texte, et quand je suis en train de le délégué à un autre objet (self.delegate = MainView) tout fonctionne bien, mais je vais devoir implémenter les méthodes delegate dans mainView, et je voudrais les mettre dans self (une classe uiTextField que j'ai créée). Si je règle self.delegate = self, j'obtiens un textField mais le clavier n'apparaît pas.

+0

veuillez clarifier: Pourquoi savez-vous que je me trompe? Qu'est-ce qui se passe –

+0

Hi. Ceci est un champ de texte, et quand je mets le délégué à un autre objet (self.delegate = mainView) tout fonctionne bien, mais alors je devrai implémenter les méthodes de délégué dans mainView, et je voudrais les mettre en soi (une classe uiTextField que j'ai créée). Si je règle self.delegate = self, j'obtiens un textField mais le clavier n'apparaît pas. – Tiger

+0

Ajout d'un commentaire d'OP dans la question. –

Répondre

12

Voir ce fil

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

Fondamentalement, la raison de la « geler » lorsque vous cliquez sur votre UITextField avec lui-même en tant que délégué est que respondsToSelector appelle lui-même -> récursion infinie.

UITextField est unique AFAIK. Vous pouvez généralement utiliser une classe comme son propre délégué sans problèmes particuliers. Pour UITextField, vous devez créer un délégué réel (qui peut, bien sûr, appeler des méthodes sur le champ UITextField pour lequel il est un délégué.Fait juste attention à éviter les boucles de retenue, même si vous utilisez ARC).

+1

FYI: iOS 8 permet à self.delegate = auto-référence. –

Questions connexes