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

时间:2014-09-18 09:13:01

标签: ios objective-c iphone ios7 uitextfielddelegate

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

P.S。当我收到无限循环时,我问question并且有initWithCoder可能导致这种循环的注释,但我看到这个语句被广泛使用。可能是我没有正确地做到这一点,但我无法弄清楚如何从UITextField中创建可重用的类。

修改 这是我的代码:

on inti我初始化并设置边框颜色:

self.delegate = self;

当我开始编辑时,我更改边框颜色并设置缩进(缩进设置将在属性设置器中移动):

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

1 个答案:

答案 0 :(得分:0)

我不知道这是否可以作为实际答案,但我已经解决了下一个问题How properly subclass UITextField in iOS?(来自justafinger)的答案。我没有在自定义控件中进行赋值self.delegate = self;,但是我有从视图控制器中的委托调用的方法。

我希望这可以帮助那些像我一样有问题的人。