ユーザーが入力した数値を(入力に時間がかかりすぎるためUITextView
、 ではなく) 文字列から数値に変換しようとしています。UITextField
ユーザーが iPhone の 10 進キーボードを介してデータを入力する場合、Bluetooth キーボード (またはシミュレーターのキーボードを使用する場合) には問題はありませんが、ユーザーは数字以外の文字を入力したり、リターン キーを押したりすることができます。もちろん、これは私には何の役にも立ちませんNSNumberFormatter
。nil
私はこれに対処する方法を理解しようとしています。許容される文字を含む入力文字列の部分だけを抽出するフィルターを作成する必要がありますか? この問題に対処するためのエレガントで効率的な方法を推奨できる人はいますか?
これが私のコードです:
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 を返すことを確認するだけです。これでは問題は解決しません。他の人はこれにどのように対処しますか?よくあるトラブルのはず...