自定义UITextField委托设置为self启动无限循环

我正在编写iPhone App,其中我需要自定义UITextField类。 对于我的文本字段,我需要缩进,图像在文本和最大字符之前。 出于这个原因,我创建了基于UITextField的自定义类。 我的所有文本字段都将基于这个新类。 我使用Google并搜索了Stackoverflow,我发现在像我这样的情况下我必须使用self.delegate = self;init期间,我不需要在我的View Controller类中实现textFieldShouldBeginEditingtextFieldShouldEndEditing等方法。 我的所有文本字段都将在storyboard中创建,因此initWithCoder 。 因此,在输入1,2或3个符号后,我收到无限循环和App崩溃(此刻我使用模拟器)。 有趣的是,对于数字键盘或密码键盘,没有这样的问题。 此外,如果我在我的Mac键盘上而不是在模拟器上键入符号,则没有问题。 我试图调试,但在崩溃期间它直接跳转到循环并存在错误。 如何克服这个问题?

PS当我收到无限循环时我问了问题 ,并且有评论说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; } 

我不知道这是否可以作为实际答案,但我已经解决了我的下一个问题的答案如何在iOS中正确地inheritanceUITextField? (来自justafinger )。 我不做作业self.delegate = self; 在我的自定义控件中,但我有从视图控制器中的委托调用的方法。

我希望这能帮助像我一样有问题的人。