超級超級久沒有寫帖了,不是忘了,心中老是惦記要寫帖,無奈前一段其他事情太多,自己根本沒有寫兩行代碼。現在安排好了,可以比較專心的迴歸應用開發的工作中了。
一下子不知道要寫什麼,就說說這一段在開發應用中常用到的限制UITextField輸入內容的方法吧!
常常開發應用的時候,希望UITextField能限制輸入的內容,比如純數字,或者英文加數字。當然iPhone可以直接限定鍵盤,但iPad就不理想,即使你把鍵盤設成Phone Pad,Number Pad之類的,至少都會出現下面這種結果:
以上肯定可以輸入括弧,@號之類的。但我們在應用中如果要求輸入純數字,或者有其他類的要求,怎麼辦呢?我給出一個解決方案(高手請路過,下面會講的比較羅嗦):
原理:實現UITextField委託中的 “-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string” 方法。
首先,在標頭檔中加入UITextFieldDelegate委託,在IB中將UITextField的委託指向File’s Owner。好了,設好委託了,然後在.m檔案中實現“-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string”,代碼:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ NSCharacterSet *cs; cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet]; NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs]componentsJoinedByString:@""]; BOOL canChange = [string isEqualToString:filtered]; return canChange;}
上面那個NUMBERS是一個宏,可以在檔案頂部定義:
#define NUMBERS @”0123456789\n” (這個代表可以輸入數字和換行,請注意這個\n,如果不寫這個,Done按鍵將不會觸發,如果用在SearchBar中,將會不觸發Search事件,因為你自己限制不讓輸入\n,好慘,我在項目中才發現的。)
所以,如果你要限制輸入英文和數位話,就可以把這個定義為:
#define kAlphaNum @”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″。
當然,你還可以在以上方法return之前,做一提示的,比如提示使用者只能輸入數字之類的。如果你覺得有需要的話。
以上內容,轉載請註明來自部落格園,作者:jauntlin
首發自jauntlin的技術專欄。