Monday, 15 February 2010

ios - NSNumberFormatter desired results for UITextField -



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