设置字符限制时缺少textField中的最后一个字符

时间:2013-09-12 17:06:04

标签: ios telprompt

我创建了一个应用程序,它将拨打5位数的医院分机号码,用户通过在其前面输入总机号码输入到textField。

由于所有分机都是5位数,我宁愿应用程序在计算5位数时启动telprompt,而不是让用户按下呼叫按钮。到目前为止,我有这个,但由于某种原因,它显示telprompt时缺少第5位数字。 (即如果用户输入“12345”,则telprompt仅显示“1234”。任何想法为什么?

- (BOOL)textField:(UITextField *)numberTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [self.numberTextField.text length] + [string length] - range.length;
if (newLength == 5) {
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"telprompt:(01233633331)(P)(%@)", self.numberTextField.text]]];
}
return YES;

}

1 个答案:

答案 0 :(得分:4)

这里的问题是你与shouldChangeCharactersInRange混淆了。仅当此函数返回YES时,TextField中的文本才会更改。在为最后一个字符返回self.numberTextField.text之前,您正在阅读YES示例:假设您要输入 01234 。直到 1234 ,您的情况会因长度不是5而失败。但只要您输入数字 4 ,实际上在将4添加到文本字段的文本之前shouldChangeCharactersInRange如果允许输入的字符进入,将被调用以符合。现在,您正在阅读文本字段的文本,该文本仍然是1个字符短。解决方案:添加此类通知

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

你可以写

if (newLength == 5) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"telprompt:(01233633331)(P)(%@)", self.numberTextField.text]]];
}

textFieldDidChange:内部功能。希望这可以帮助你:)