我创建了一个应用程序,它将拨打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;
}
答案 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:
内部功能。希望这可以帮助你:)