UITextField字數限制

Henry Huang
3 min readNov 30, 2018

--

首先實作UITextFieldDelegate

然後再使用

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {}

三個參數分別代表:

textField = 可以知道是哪個textField,也可以取到textField的值textField.text

range = 要被替換的字符的範圍

string = 最新輸入的字串

回傳 true 代表可繼續輸入 ; false則不能繼續輸入

這個方法就是只要textField有輸入或刪除動作等變動的情形就會觸發,所以其實這裡可以做的不止是字數的限制,也可以做輸入英文、數字、或特殊符號的限制

以下為限制最大字數為20程式碼

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let text = textField.text else { return true } let count = text.count + string.count - range.length return count <= 20}

這樣確實是可以達成目的,但是只適用於畫面上只有一個textField,因為上面這段是會影響全部的textField,例如有三個textField:

textField1 輸入了6位數

textField2 輸入了20位數

這時候會造成textField3無法在輸入任何東西,因為textField2輸入了我們限制的最大位數20位

所以我更改了一下程式碼為以下

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

if textField == passwordTxt {

if let text = passwordTxt.text {

let count = text.count + string.count — range.length

return count <= 20

}

} else if textField == rePasswordTxt {

if let text = rePasswordTxt.text {

let count = text.count + string.count — range.length

return count <= 20

}

} else {

return true

}

return true

}

這樣是可以分辨是哪個textField,但好像只適用於較少textField時 XD

得等有較多時間實在來想想其他方式,有更好的方式也請跟我分享唷~

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Henry Huang
Henry Huang

Written by Henry Huang

大學讀企管/退伍後在業務圈打滾6年後突然有一天決定投入完全沒接觸過的程式設計/目前為一位iOS Developer/熱愛NBA/dafu1231@gmail.com

No responses yet

Write a response