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
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 ).