Ios 设置多个文本字段的最大长度

Ios 设置多个文本字段的最大长度,ios,iphone,objective-c,uitextfield,Ios,Iphone,Objective C,Uitextfield,我从另一篇堆栈溢出文章中找到了这段代码 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger upperRightLength = [upperRight.text length] + [string length] - range.length; return

我从另一篇堆栈溢出文章中找到了这段代码

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger upperRightLength = [upperRight.text length] + [string length] - range.length;
    return (upperRightLength > 1) ? NO : YES;
        }
我需要运行同样的代码,它可以在多个文本字段上运行

我试过这个,但它似乎没有正确运行,没有同样的效果

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger upperRightLength = [upperRight.text length] + [string length] - range.length;
    return (upperRightLength > 1) ? NO : YES;

    NSUInteger upperLeftLength = [upperLeft.text length] + [string length] - range.length;
    return (upperLeftLength > 1) ? NO : YES;
}
我不知道还能做什么!非常感谢你的帮助

编辑: 我现在尝试了另一个代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger upperRightLength = [upperRight.text length] + [string length] - range.length;
    NSUInteger upperLeftLength = [upperLeft.text length] + [string length] - range.length;
    return (upperLeftLength > 1 &&  upperRightLength > 1 ) ? NO : YES;
}
现在,同样的事情似乎也发生了。我先点击哪个文本字段,比如左上角,我仍然可以输入我想要的字符。但当我点击右上方的另一个文本字段时,我只能输入1个字符。我试着先从右上角开始,我看到了相同的结果。。。右上角允许我输入任意数量的字符,左上角只允许我输入1个字符!这太奇怪了!!谢谢你的帮助

您永远不会计算upperLeftLength,因为您刚好在返回之前返回。因此,您需要做的是计算upperLeftLength和upperRightLength,然后确定它是否返回YES或NO。在upperLeftLength行上放置一个断点,您将看到断点永远不会被击中

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger upperRightLength = [upperRight.text length] + [string length] - range.length;
    NSUInteger upperLeftLength = [upperLeft.text length] + [string length] - range.length;
    return (upperLeftLength > 1 &&  upperRightLength > 1 ) ? NO : YES;
}

那就行了。

我想你没有抓住委派方法的要点。此方法为您提供正在编辑的文本字段,以便您可以使用提供给您的对文本字段的引用,而不使用ivar

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
  NSUInteger length = [textField.text length] + [string length] - range.length;
  return !(length > 1);
}
使现代化 对于不同的字段,有许多不同的方法来处理不同的长度。最简单的方法是:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
  NSInteger maxLength = 1;

  if (textField == self.myOtherTextField) {
    maxLength = 2;
  }

  NSUInteger length = [textField.text length] + [string length] - range.length;
  return !(length > maxLength);
}

更好的方法是像UITextViewDelegate方法一样使用didChange方法,但是我们知道UITextFieldDelegate没有didChange方法。您可以手动添加行为。您可以使用shouldChangeCharactersInRange:方法,但我个人建议不要重写这些方法,除非您必须这样做

您可以使用以下方法添加行为:

[yourTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
在目标方法中:

- (void)textFieldDidChange:(UITextField*)textField{

    //handle code
}
这里的优点是,您不必等到用户键入另一个字符后才知道您的代码应该生效。一旦达到限制,您的代码就会生效

如果您的文本字段是全局的,您可以使用textField==upperRight直接在此处访问它们,或者如果它们是在块中定义的,只需设置它们的标记并使用textField.tag==进行检查。

试试这个

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

     if (_card_Number==textField){
    if(range.length + range.location > textField.text.length)
            {
                return NO;
            }

            NSUInteger newLength = [textField.text length] + [string length] 
               - range.length;
            return newLength <= 19;

     }else if (_card_cvnf==textField){
    if(range.length + range.location > textField.text.length)
            {
                return NO;
            }

            NSUInteger newLength = [textField.text length] + [string length] - range.length;
            return newLength <= 4;
        }else{
                        return NO;
        }

    }
}

你能详细说明一下你到底想用这个实现什么吗?谢谢!所以现在同样的事情似乎发生了。我先点击哪个文本字段,比如左上角,我仍然可以输入我想要的字符。但当我点击右上方的另一个文本字段时,我只能输入1个字符。我试着先从右上角开始,我看到了相同的结果。。。右上角允许我输入任意数量的字符,左上角只允许我输入1个字符!这太奇怪了!!谢谢你的帮助!!对这就是我最初所做的,它工作得非常好,问题是我需要为多个文本字段运行相同的代码。我只是不知道如何使用上面给出的代码来实现这一点!谢谢你为每个文本字段设置了代理吗?哈哈,我不太确定。这就是我所做的。。在。在.m self.upperRight.delegate=self中;您也需要对左上角的textfield执行此操作。当您更新其中一个textfield时是否调用此方法?您能否显示您正试图使用的确切代码以及文本字段的设置。