【问题标题】:Set custom UITextField max length设置自定义 UITextField 最大长度
【发布时间】:2012-11-26 15:23:27
【问题描述】:

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

我在(void)viewDidLoad 内部创建了一个自定义UITextField。我以编程方式创建了它,因此我可以访问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(...

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

【问题讨论】:

  • 你到底为什么要删掉最重要的一段代码? [tff addTarget:self action:@selector(changed:) forControlEvents:UIControlEventEditingChanged];是你需要的东西。
  • 试试 textField.delegate = self;并且视图控制器实现了 shouldChangeCharactersInRange;
  • Jimpic 没用。但我找到了解决方案,谢谢。

标签: ios xcode uitextfield


【解决方案1】:

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

[textField setDelegate:self];

那么你可以继续删除这条线

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

假设您使用它来调用shouldChangeCharactersInRange。现在您已经设置了委托,该方法将被自动调用。

【讨论】:

  • 成功了!我会在5分钟内接受这个!谢谢大家!
猜你喜欢
  • 2011-02-01
  • 2010-09-30
  • 2014-10-03
  • 2018-03-12
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
相关资源
最近更新 更多