Пользовательский делегат UITextField, установленный в self, инициирует бесконечный цикл

Я пишу приложение для iPhone, в котором мне нужен пользовательский класс UITextField. Для моих текстовых полей мне нужен отступ, изображение внутри перед текстом и максимум символов. По этой причине я создал собственный класс на основе UITextField. Все мои текстовые поля будут основаны на этом новом классе. Я использую Google и искал Stackoverflow, и я обнаружил, что в таких случаях, как мой, я должен использоватьself.delegate = self; в течениеinit поэтому мне не нужно реализовывать такие методы, какtextFieldShouldBeginEditing или жеtextFieldShouldEndEditing внутри моего класса View Controller. Все мои текстовые поля будут созданы в раскадровке такinitWithCoder, В результате я получаю бесконечный цикл и сбой приложения (в данный момент я пользуюсь симулятором) после ввода 1, 2 или 3 символов. Интересно, что для цифровой клавиатуры или клавиатуры пароля такой проблемы нет. Также, если я набираю символы на клавиатуре Mac вместо симулятора, проблем не возникает. Я попытался отладить, но во время сбоя он переходит прямо в цикл и существует с ошибкой. Как преодолеть эту проблему?

Постскриптум Я спросилвопрос когда я получаю бесконечный цикл и появляются комментарии, которыеself.delegate = self; может вызвать такой цикл, но я вижу, что это утверждение широко используется. Может быть, я не сделал это правильно, но я не могу понять, как сделать повторно используемый класс из UITextField.

РЕДАКТИРОВАТЬ: Вот мой код:

На inti я инициализирую и устанавливаю цвет границы:

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

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

Когда я начинаю редактировать, я изменяю цвет границы и устанавливаю отступ (набор отступов будет перемещен в установщик свойств):

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

По окончании редактирования я возвращаю обратно цвет:

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

И при изменении значения я проверяю максимум символов:

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

Ответы на вопрос(1)

Ваш ответ на вопрос