Ios 不允许用户在UITextField中输入数字1作为第一位数字

Ios 不允许用户在UITextField中输入数字1作为第一位数字,ios,iphone,objective-c,uitextfield,nsrange,Ios,Iphone,Objective C,Uitextfield,Nsrange,我有一个UITextField,用户可以在其中输入他们的电话号码。我需要的电话号码是以下格式:5567289223,而不是像这样的一个额外的1在开始:15567289223 我已经有一个if语句设置,所以如果数字大于10位或小于10位,它将抛出一个错误 最后一个我不知道如何解决的问题是,如果用户试图在电话号码的开头加上1 我需要设置一个if语句,这样如果电话号码中的第一个字符是“1”,我们就会抛出一个错误,或者更简单的解决方案是使用shouldChangeCharactersInRange,这样

我有一个UITextField,用户可以在其中输入他们的电话号码。我需要的电话号码是以下格式:5567289223,而不是像这样的一个额外的1在开始:15567289223

我已经有一个if语句设置,所以如果数字大于10位或小于10位,它将抛出一个错误

最后一个我不知道如何解决的问题是,如果用户试图在电话号码的开头加上1

我需要设置一个if语句,这样如果电话号码中的第一个字符是“1”,我们就会抛出一个错误,或者更简单的解决方案是使用
shouldChangeCharactersInRange
,这样如果是他们在UITextField中键入的第一个数字,那么它就不能是1

早些时候有人给了我这个解决方案,用于控制允许在UITextField中键入哪些字符:

我一直试图修改它,这样它就不会允许数字“1”成为输入UITextField的第一个数字,但我无法让它正常工作

非常感谢您的帮助。

请参阅此答案

我将设置一个事件处理程序,如该示例中所述。然后是选择器中的if语句:

if([textField.text length] == 1 && [textField.text isEqualToString:@"1"]){

     //Do something.
}
希望这有助于

看到这个答案

我将设置一个事件处理程序,如该示例中所述。然后是选择器中的if语句:

if([textField.text length] == 1 && [textField.text isEqualToString:@"1"]){

     //Do something.
}

希望这有帮助

我已经根据您的需要修改了您想要使用的示例,您可以查看它

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField==self.testTextField&&range.location==0)
{
    if ([string hasPrefix:@"1"])
    {
        return NO;
    }
}

return YES;
}

我已经根据您的需要修改了您想要使用的示例,您可以查看它

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField==self.testTextField&&range.location==0)
{
    if ([string hasPrefix:@"1"])
    {
        return NO;
    }
}

return YES;
}
斯威夫特

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{

 if textField == self.txtFieldName && range.location == 0
    {
        if string.hasPrefix("1"){
            return false
        }
    }
    return true

}
斯威夫特

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{

 if textField == self.txtFieldName && range.location == 0
    {
        if string.hasPrefix("1"){
            return false
        }
    }
    return true

}

这不管用。我能够输入“1”,当我输入并尝试输入第二个数字时,应用程序崩溃并给我这个错误:范围或索引超出界限“@MartinR我实际上需要能够输入数字1,而不是输入uitextfield的第一个数字。之后的任何地方都可以。我已经编辑了我的帖子,也测试过了。。为我工作!:)如果1)您点击“删除”键(因为在这种情况下,
string
是空字符串,
characterAtIndex:0
将崩溃),或者2)您使用复制/粘贴替换字段内容(因为在这种情况下,
textField.text
不是空的)。现在情况好多了!请注意,如果([string hasPrefix:@“1”])…,则可以将字符检查简化为
。这不起作用。我能够输入“1”,当我输入并尝试输入第二个数字时,应用程序崩溃并给我这个错误:范围或索引超出界限“@MartinR我实际上需要能够输入数字1,而不是输入uitextfield的第一个数字。之后的任何地方都可以。我已经编辑了我的帖子,也测试过了。。为我工作!:)如果1)您点击“删除”键(因为在这种情况下,
string
是空字符串,
characterAtIndex:0
将崩溃),或者2)您使用复制/粘贴替换字段内容(因为在这种情况下,
textField.text
不是空的)。现在情况好多了!请注意,如果([string hasPrefix:@“1”])…
,则可以将字符检查简化为