2012-11-26 119 views
0

我找不到解决方案,因为所有其他帖子stackOverflow都是指用IDE创建的UITextField,而不是编程方式。设置自定义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; 
} 

但我意识到,我的文本框没有 “发现” 上面function.Tried与

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

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

+0

为什么你最重要的一段代码呢? [tff addTarget:self action:@selector(changed :) forControlEvents:UIControlEventEditingChanged];是你需要的东西。 – jimpic

+0

尝试textField.delegate = self;并且viewcontroller实现了shouldChangeCharactersInRange; – zt9788

+0

Jimpic它没有工作。但我得到了我的解决方案,无论如何。 – Theodoros80

回答

2

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

[textField setDelegate:self]; 

然后你就可以继续前进,删除此行

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

假设你正在使用这个来拨打shouldChangeCharactersInRange。现在您已经设置了委托,此方法将自动调用。

+0

它的工作!我会在5分钟内接受这一个!谢谢你们! – Theodoros80