Delegado UITextField personalizado definido como auto-inicia loop infinito

Estou escrevendo o aplicativo para iPhone no qual preciso da classe UITextField personalizada. Para meus campos de texto, preciso de recuo, imagem dentro antes do texto e no máximo caracteres. Por esse motivo, criei uma classe personalizada com base no UITextField. Todos os meus campos de texto serão baseados nesta nova classe. Eu uso o Google e procurei o Stackoverflow e acho que em casos como o meu tenho que usarself.delegate = self; durante oinit então eu não preciso implementar métodos comotextFieldShouldBeginEditing outextFieldShouldEndEditing dentro da minha classe View Controller. Todos os meus campos de texto serão criados no storyboard para queinitWithCoder. Como resultado, recebo loop infinito e falha no aplicativo (uso o simulador no momento) depois de digitar 1, 2 ou 3 símbolos. É interessante que, para teclado numérico ou teclado com senha, não exista esse problema. Além disso, se eu digitar símbolos no teclado do Mac, no simulador, não haverá problema. Eu tentei depurar, mas durante a falha, ele pula diretamente para o loop e existe com erro. Como superar esse problema?

P.S. eu pergunteiPergunta, questão quando eu recebo loop infinito e houve comentários queself.delegate = self; pode causar esse loop, mas vejo que essa declaração é amplamente usada. Pode ser que eu não fiz isso corretamente, mas não consigo descobrir como tornar a classe reutilizável fora do UITextField.

EDITAR: Aqui está o meu código:

No inti eu inicializo e defino a cor da borda:

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

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

Quando inicio a edição, altero a cor da borda e defino o recuo (o recuo será movido no configurador de propriedades):

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

Ao finalizar a edição, retorno a cor:

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

E na alteração de valor, verifico no máximo caracteres:

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