限制多个 UITextField 的长度

Posted

技术标签:

【中文标题】限制多个 UITextField 的长度【英文标题】:Limit the length of multiple UITextFields 【发布时间】:2011-05-29 22:27:29 【问题描述】:

我有四个UITextFields,想限制每个的长度,但它们的长度都不一样。到目前为止,我有以下代码,但它不能正常工作

define MAXLENGTH 5
define MAXQTY 3
define MAXSIZE 4
define MAXBRAND 10

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    int lengtha = [brand.text length] ;
    NSLog(@"lenghta = %d",lengtha);
    if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) 
    brand.text = [brand.text substringToIndex:MAXBRAND];
        return NO;
    
    return YES;

    int lengthb = [qty.text length] ;
    NSLog(@"lenghtb = %d",lengtha);
    if (lengthb >= MAXQTY && ![string isEqualToString:@""]) 
        qty.text = [qty.text substringToIndex:MAXQTY];
        return NO;
    
    return YES;

    int lengthc = [size.text length] ;
    NSLog(@"lenghtc = %d",lengtha);
    if (lengthc >= MAXSIZE && ![string isEqualToString:@""]) 
        size.text = [size.text substringToIndex:MAXSIZE];
        return NO;
    
    return YES;

    int lengthd = [price.text length] ;
    NSLog(@"lenghtd = %d",lengtha);
    if (lengthd >= MAXLENGTH && ![string isEqualToString:@""]) 
        price.text = [price.text substringToIndex:MAXLENGTH];
        return NO;
    
    return YES;

【问题讨论】:

一旦您的代码到达第一个“返回 YES;”在 if 语句之后,没有其他任何东西得到处理。你的逻辑不正确。 【参考方案1】:

如果品牌、数量、尺寸和价格是实例变量(或属性)并连接到您的 UITextFields,您可以试试这个:

define MAXLENGTH 5
define MAXQTY 3
define MAXSIZE 4
define MAXBRAND 10

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    if (textField == brand) 
        int lengtha = [brand.text length];
        NSLog(@"lenghta = %d",lengtha);
        if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) 
            brand.text = [brand.text substringToIndex:MAXBRAND];
            return NO;
        
        return YES;
     else if (textField == qty) 
        int lengthb = [qty.text length];
        NSLog(@"lenghtb = %d",lengthb);
        if (lengthb >= MAXQTY && ![string isEqualToString:@""]) 
            qty.text = [qty.text substringToIndex:MAXQTY];
            return NO;
        
        return YES;
     else if (textField == size) 
        int lengthc = [size.text length];
        NSLog(@"lenghtc = %d",lengthc);
        if (lengthc >= MAXSIZE && ![string isEqualToString:@""]) 
            size.text = [size.text substringToIndex:MAXSIZE];
            return NO;
        
        return YES;
     else if (textField == price) 
        int lengthd = [price.text length];
        NSLog(@"lenghtd = %d",lengthd);
        if (lengthd >= MAXLENGTH && ![string isEqualToString:@""]) 
            price.text = [price.text substringToIndex:MAXLENGTH];
            return NO;
        
        return YES;
    
    return YES;

【讨论】:

我已根据您的建议修改了代码,但我仍然得到相同的结果,文本字段没有限制,NSLog 没有报告字符数。我在 .h 文件中设置了 UITextfields,也在 .h 文件中设置了 IBOutlets 我已修复它,您的代码很棒,我在 viewDidLoad 下添加了 brand.delegate=self,现在效果很好,感谢您的帮助 是的,您必须为所有四个 UITextField 设置委托。我还稍微编辑了上面的代码。在所有四种情况下,您总是 NSLogging lengtha,而不是每次都使用正确的变量(lengtha、lengthb、lengthc、lengthd)。

以上是关于限制多个 UITextField 的长度的主要内容,如果未能解决你的问题,请参考以下文章

UITextField限制输入长度

如何更好地限制一个UITextField的输入长度

UITextField中文输入法输入时对字符长度的限制

如何更好地限制一个UITextField的输入长度

Objective-C 限制文本输入长度

iOS输入框UITextField输入限制