0

ユーザーが入力した数値を(入力に時間がかかりすぎるためUITextView、 ではなく) 文字列から数値に変換しようとしています。UITextFieldユーザーが iPhone の 10 進キーボードを介してデータを入力する場合、Bluetooth キーボード (またはシミュレーターのキーボードを使用する場合) には問題はありませんが、ユーザーは数字以外の文字を入力したり、リターン キーを押したりすることができます。もちろん、これは私には何の役にも立ちませんNSNumberFormatternil

私はこれに対処する方法を理解しようとしています。許容される文字を含む入力文字列の部分だけを抽出するフィルターを作成する必要がありますか? この問題に対処するためのエレガントで効率的な方法を推奨できる人はいますか?

これが私のコードです:

static NSNumberFormatter *numberFormatter;
if (numberFormatter==nil) {
        numberFormatter=[[NSNumberFormatter alloc] init];
        [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
        [numberFormatter setLenient:YES];
}
self.value = [numberFormatter numberFromString:self.valueTextView.text];

私が言ったように、ユーザーが42, またはを入力した場合42.5、これは正常に機能しますが、入力した場合42.5<Return>(キーボードからのみ実行できます) はself.valueですnil注:setLenient問題に対処するためにモードを追加しましたが、役に立ちませんでした。

Stack Overflow で他の回答を確認しました (多くの人が同様の質問をしています) が、私が見つけた回答は、はい、NSNumberFormatter解析のみで検証は行わず、解析できない場合は nil を返すことを確認するだけです。これでは問題は解決しません。他の人はこれにどのように対処しますか?よくあるトラブルのはず...

4

1 に答える 1

1

デリゲート メソッドを実装する必要がありますtextView:shouldChangeTextInRange:replacementText:。その実装では、編集が完了した場合に存在するテキストを作成し、フォーマッタでそのテキストから数値を取得する必要があります。番号を取得したら、編集を許可します。そうでない場合は、編集を拒否します。

于 2013-08-08T20:37:18.893 に答える