self.delegate = self; cosa c’è di sbagliato nel farlo?

self.delegate = self; cosa c’è di sbagliato nel farlo? e qual è il modo corretto di farlo?

Grazie, Nir.

Codice:

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

Note : Questo è un campo di testo, e quando sto impostando il delegato su un altro object (self.delegate = mainView) tutto funziona correttamente, ma poi dovrò implementare i metodi delegate in mainView, e vorrei metterli in self (una class uiTextField che ho creato). Se sto impostando self.delegate = self, ottengo un campo di testo ma la tastiera non viene visualizzata.

Vedi questo thread

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

Fondamentalmente, il motivo del “fermo immagine” quando fai clic sul tuo UITextField con se stesso come delegato è che respondsToSelector chiama se stesso -> ricorsione infinita.

UITextField è unico AFAIK. Di solito è ansible utilizzare una class come propria delegata senza particolari problemi. Per UITextField è necessario creare un delegato effettivo (che potrebbe, naturalmente, chiamare i metodi su UITextField per il quale si tratta di un delegato. Basta fare attenzione a evitare i loop di conservazione, anche se si sta utilizzando ARC ).