2014-11-14 63 views
0

我想要一個的UITextField配置爲僅接受11號11號寫的,我使用NSNumberFormatter和它的作品只是用數字很好,但是當我嘗試設置可用的最大數量,它不起作用。設置爲UITextField到最大使用NSNumberFormatter

即使分配setMaximumFractionDigitssetMaximumIntegerDigitssetMaximumSignificantDigits它並不像它應該工作,還是我失去了一些東西?請幫忙。

這裏是我的代碼...

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

NSNumberFormatter *num = [[NSNumberFormatter alloc] init]; 

[num setNumberStyle:NSNumberFormatterDecimalStyle]; 
[num setUsesSignificantDigits:YES]; 
[num setMaximumFractionDigits:0]; 
[num setMaximumIntegerDigits:11]; 
[num setMaximumSignificantDigits:11]; 

NSString *aString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 
//[NSString stringWithFormat:@"%@%@", textField.text, string]; 
NSNumber *number = [num numberFromString:aString]; 

if (number) { 
    return YES; 
else 
    return NO; 
} 

編輯:

我重新排序像伊恩代碼表示,並提出,油墨也稱,這些變化還是一樣,我可以只寫數字,但我可以寫出超過11個數字。

EDIT 2

感謝Ian和墨水,現在的作品,我需要檢查aString.length是輕微高於12,它是一個

if (aString.length < 12 && number) 
     return YES; 
    else 
     return NO; 

感謝您的幫助!

+0

提供一些什麼,如果不工作的例子。 – rmaddy 2014-11-14 16:57:16

+0

我真的建議不要這樣做。基於過濾類型拒絕用戶內容更改非常令人沮喪。當用戶輸入文本時,文本可以經歷許多中間階段,通過驗證他們進入你需要他們遵循對他們來說可能不明顯的路徑。 – 2014-11-14 17:59:10

回答

0

您在num設置你的限制之前分配number ...試試這個:

[num setUsesSignificantDigits:YES]; 
[num setMaximumFractionDigits:0]; 
[num setMaximumIntegerDigits:11]; 
[num setMaximumSignificantDigits:11]; 

NSNumber *number = [num numberFromString:aString]; 

if (number) { 
    return [[num stringFromNumber:number] length] <= 11 && [[num stringFromNumber:number] length] == [aString length]; 
} else { 
    return NO; 
} 
+0

我試過了,我仍然可以寫出超過11個數字。 – xzrudy 2014-11-14 17:28:43

+0

那是因爲你沒有檢查事物的長度,你只是使用它的結果。它仍然會解析一個數字,它只是不一定符合您的輸入。如果你擔心結果,你應該比較'aString。長度<= 11「或使用您的數字格式化程序進行反向並檢查長度... – 2014-11-14 17:53:10

+0

什麼是愚蠢的我,我只是評估數字本身,我需要檢查如果aString的長度<12。 !,感謝隊友幫助我意識到這一點! – xzrudy 2014-11-14 18:04:16

1

aString應該是[textField.text stringByReplacingCharactersInRange:range withString:string]

return aString.length <= 11; 

從那裏,你可以只檢查字符串的長度,假設你知道,這是一個數字字符串。如果你不能假設,然後做什麼@Ian麥克唐納建議,並重新安排你的代碼看起來像這樣:

NSNumber *rawNumber = [num numberFromString:aString]; 

[num setUsesSignificantDigits:YES]; 
[num setMaximumFractionDigits:0]; 
[num setMaximumIntegerDigits:11]; 
[num setMaximumSignificantDigits:11]; 

NSNumber *number = [num numberFromString:aString]; 
return rawNumber == number; 

還要注意,只是看到,如果數字格式給你一個數字是不夠好。你需要檢查數字是否被格式化程序修剪過。

+0

雖然這是事實,但這不是問題的答案。請將其作爲評論或更新您的答案以真正回答問題。 – rmaddy 2014-11-14 16:56:50

+0

我做了你告訴我,我仍然得到相同的結果;我可以寫出超過11個數字。 – xzrudy 2014-11-14 17:19:09

+0

@xzrudy更多詳細信息 – InkGolem 2014-11-14 17:29:13