Benutzerdefinierter UITextField-Delegat, der auf Selbst festgelegt ist, leitet Endlosschleife ein

Ich schreibe eine iPhone App, in der ich eine benutzerdefinierte UITextField-Klasse benötige. Für meine Textfelder benötige ich Einrückung, Bild vor dem Text und max. Zeichen. Aus diesem Grund habe ich eine benutzerdefinierte Klasse basierend auf UITextField erstellt. Alle meine Textfelder basieren auf dieser neuen Klasse. Ich benutze Google und habe Stackoverflow durchsucht und finde, dass ich in Fällen wie meinem @ verwenden musself.delegate = self; während derinit Also muss ich keine Methoden wie @ implementiertextFieldShouldBeginEditing odertextFieldShouldEndEditing in meiner View Controller-Klasse. Alle meine Textfelder werden im Storyboard erstellt, alsoinitWithCoder. Als Ergebnis erhalte ich eine Endlosschleife und einen App-Absturz (ich verwende derzeit den Simulator), nachdem ich 1, 2 oder 3 Symbole eingegeben habe. Es ist interessant, dass es für die numerische Tastatur oder die Kennworttastatur kein solches Problem gibt. Auch wenn ich Symbole auf meiner Mac-Tastatur anstatt auf dem Simulator eingebe, gibt es kein Problem. Ich habe versucht zu debuggen, aber während des Absturzes springt es direkt in die Schleife und existiert mit Fehler. Wie kann dieses Problem behoben werden?

P.S. Ich habe gefragtFrag Wenn ich eine Endlosschleife erhalte und es Kommentare gab, dieself.delegate = self; kann eine solche Schleife verursachen, aber ich sehe, dass diese Anweisung weit verbreitet ist. Vielleicht habe ich das nicht richtig gemacht, aber ich kann nicht herausfinden, wie ich aus UITextField eine wiederverwendbare Klasse machen kann.

BEARBEITEN Hier ist mein Code:

Auf inti initialisiere ich und setze die Rahmenfarbe:

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {

        self.layer.borderColor=[[UIColor blackColor] CGColor];
        self.delegate = self;
    }
    return self;
}

Wenn ich mit der Bearbeitung beginne, ändere ich die Rahmenfarbe und setze den Einzug (der Einzug wird in den Property Setter verschoben):

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    // Change border of text field that is editing to orange
    textField.layer.masksToBounds=YES;
    textField.layer.borderColor=[[UIColor orangeColor] CGColor];
    textField.layer.borderWidth= 1.0f;

    UIView *spacerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, _leftIndent, 10)];
    [self setLeftViewMode:UITextFieldViewModeAlways];
    [self setLeftView:spacerView];

    return YES;
}

Nach Beendigung der Bearbeitung kehre ich zurück Farbe:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{

    // Change border of text field that is edited to black
    textField.layer.masksToBounds=YES;
    textField.layer.borderColor=[[UIColor blackColor] CGColor];
    textField.layer.borderWidth= 1.0f;

    return YES;
}

Und bei einer Wertänderung überprüfe ich die maximale Anzahl von Zeichen:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    // Restrict number of symbols in text field to "maxSymbols"
    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= (int)_maxSymbols || returnKey;
}