2

ユーザーが textField に入力する 5 桁の病院の内線番号に電話をかけるアプリを作成しました。

すべての内線番号は 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;

}

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 に答える