ios - NSNumberFormatter desired results for UITextField -
i'm having problem getting desired nsnumberformatter results. i've tried several combinations of properties haven't gotten i'm looking for.
i'd format uitextfield user types decimal pad keyboard.
acceptable input formats:
12
12.3
12.34
a minimum of 2 digits preceeding decimal , maximum of 2 digits next decimal. maximum value possible in case 99.99.
as user types 1 2 3 4.. textfield should display following
1
12
12.3
12.34
if user doesn't explicitly utilize decimal key, should automatically inserted.
here's latest attempt, said.. i've tried lot of things
-(void)textfielddidchange:(uitextfield *)thetextfield { if (thetextfield.text) { nsnumberformatter *formatter = [[nsnumberformatter alloc] init]; [formatter setnumberstyle:nsnumberformatterdecimalstyle]; nsnumber *number = [formatter numberfromstring:thetextfield.text]; //[formatter setminimumintegerdigits:2]; [formatter setmaximumintegerdigits:2]; [formatter setmaximumfractiondigits:2]; thetextfield.text = [nsstring stringwithformat:@"%@", [formatter stringfromnumber:number]]; } }
i'd take approach.
in textfielddidchange not format validate nspredicate , regex.
-(void)textfielddidchange:(uitextfield *)thetextfield { if (thetextfield.text) { nsstring *regex = @"^[0-9]{0,2}[\\.]{0,1}[0-9]{0,2}$"; nspredicate *pred = [nspredicate predicatewithformat:@"self matches %@", regex]; if (![pred evaluatewithobject:mystring]) { // error, input not matching! remove lastly added character. int len = thetextfield.text.length-((thetextfield.text.length-1 == 3) ? 2 : 1; thetextfield.text = [thetextfield.text substringwithrange:nsmakerange(0, len)]; // checks if new length, i.e. length when lastly digit has been deleted 3, means decimal dot lastly character. if remove 2 instead of 1 character! } else { // okay here, whatever if(thetextfield.text.length == 2) // add together decimal dot if 2 digits have been entered! thetextfield.text = [nsstring stringwithformat:@"%@.", thetextfield.text]; } } }
ios uitextfield nsnumberformatter
No comments:
Post a Comment