2

我创建了一个应用程序,它将调用一个 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;

}

4

1 回答 1

4

这里的问题是你对shouldChangeCharactersInRange. 仅当此函数返回时,TextField 中的文本才会更改YES。您正在阅读 最后一个字符self.numberTextField.text返回之前的内容。例子:假设你要输入01234。直到1234您的条件失败,因为长度不是 5。但是一旦您输入数字4,在 4 实际添加到文本字段的文本之前,如果应该允许输入的字符,将被调用以符合要求。这就是您现在阅读文本字段的文本的地方,该文本仍然短 1 个字符。解决方案:添加这样的通知YESshouldChangeCharactersInRange

[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:函数。希望这对你有帮助:)

于 2013-09-12T17:50:51.803 回答