设置自定义UITextField最大长度

时间:2012-11-26 15:23:28

标签: ios xcode uitextfield

我找不到我的问题的解决方案,因为stackOverflow上的所有其他帖子都引用了使用IDE创建的UITextField而不是以编程方式创建。

我在UITextField内创建了一个自定义(void)viewDidLoad。我以编程方式创建了这个,因此我可以访问leftView属性。

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 66, screenAdj, 30)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font=[UIFont fontWithName:@"Helvetica" size:14];
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [textField addTarget:self action:@selector(textFieldShouldReturn:)forControlEvents:UIControlEventEditingDidEndOnExit];
    textField.text=[defaults stringForKey:@"username"];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
    label.font=[UIFont fontWithName:@"Helvetica" size:14];
    label.text = @"Your name";
    label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.0];
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.leftView = label;

我还想限制TextField实现中的最大字符:

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

    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 <= MAX_LENGTH_USERNAME || returnKey;
}

但是我意识到我的textField没有“看到”上面的功能。与

结合
[textField addTarget:self action:@selector(...

但没有运气。 有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

您必须告诉视图控制器符合UITextFields委托协议。在您的(.h)中,在“UIViewController”之后添加<UITextFieldDelegate>,当您设置文本字段时,将其委托设置为self

[textField setDelegate:self];

然后你可以继续删除这一行

[textField addTarget:self action:@selector(...

假设您使用此号码致电shouldChangeCharactersInRange。现在您已经设置了委托,将自动调用此方法。