3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
UITextField 是開發 XCode 用來開發程式的一個重要元件,也是讓使用者自由輸入文字的元件。UITextField 相對於 Android 系統來說,就是 EditText。而如果我們要設計一個欄位,如身份證字號,只能讓使用者自動輸入英文或數字,在 Android 來說,只要從 XML 中設定就可以了,但在 XCode 中,我們則必須寫在程式碼中。寫法其實並不難,有分好幾種方式,而海芋個人是比較喜歡用正規表達式來限定,所以以下的方式,就以正規表達式來做一個示範。   假設,我們有一個 UITextField,已命名為 m_TextField_ID,如果要判斷讓使用者在該 UITextField 只能輸入英數的話,那麼只要寫以下的函式。 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField == self.m_TextField_ID) { NSString* resultString = [textField.text stringByReplacingCharactersInRange: range withString: string]; NSString *regExPattern = @"[a-zA-Z0-9]*"; BOOL bIsInputValid = [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regExPattern] evaluateWithObject: resultString]; return bIsInputValid; } return YES; }   這一段程式碼很簡單,首先我們先定義一個新的字串,叫做 resultString,resultString 是使用者輸入後的字串,會隨使用者輸入而即時改變,接下來在用正規表達式,檢查使用者是否輸入英數模式,如果是的話就回傳 YES,如果不是的話就回傳 NO。至於 NSPredicate,則是可以參考 「APPLE 官方網站」的介紹。   如果我只是即時把使用者輸入的英文字元都變大寫,怎麼做呢?也是很簡單,請參考下列程式碼。 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField == self.m_TextField_ID) { NSString* resultString = [textField.text stringByReplacingCharactersInRange: range withString: string]; [textField setText:[resultString uppercaseString]]; return NO; } return YES; }   上面程式碼是說,我們先定義一個新的字串,叫做 resultString,resultString 是使用者輸入後的字串,接下來,我們將目前這個 TextField 所顯示的字串設為 [resultString uppercaseString],也就是將使用者輸入後的字串設到 TextField 去,因為已經將新產生的字串設到 TextField 了,所以這時就不用再通知 iOS 要再改變 TextField 的字串了,所以直接回傳 NO 就可以了。   而這兩個範例如果要加起來怎麼做呢?以下就是一個 TextField 只能輸入英數,而且即時將英文字母自動變為大寫的範例,供大家參考囉! - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField == self.m_TextField_ID) { NSString* resultString = [textField.text stringByReplacingCharactersInRange: range withString: string]; NSString *regExPattern = @"[a-zA-Z0-9]*"; BOOL bIsInputValid = [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regExPattern] evaluateWithObject: resultString]; if (bIsInputValid) { [textField setText:[resultString uppercaseString]]; return NO; } return bIsInputValid; } return YES; }

本文由inote提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦