【问题标题】:Missing last character from textField when setting character limit设置字符限制时缺少 textField 中的最后一个字符
【发布时间】:2013-09-12 17:06:04
【问题描述】:

我创建了一个应用程序,该应用程序将呼叫一个 5 位数的医院分机号码,用户通过在其前面加上总机号码将其输入到 textField 中。

由于所有分机都是 5 位数字,我宁愿应用程序在计数到 5 位数字时启动电话提示,而不是让用户按下呼叫按钮。到目前为止我有这个,但由于某种原因,当它显示 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;

}

【问题讨论】:

    标签: ios telprompt


    【解决方案1】:

    这里的问题是你对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: 函数内。希望这对你有帮助:)

    【讨论】:

    • 啊,我明白了!太好了-非常感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多