概覽
UITextField 作為可編輯的文本控件,它可以幫助開(kāi)發(fā)者收集通過(guò)鍵盤輸入的文本內(nèi)容。鍵盤的輸入樣式是支持配置的:文本、郵箱、數(shù)字、是否加密(密碼輸入的場(chǎng)景)、鍵盤的return 按鈕樣式等等。由于UITextField 是繼承于 UIControl,所以它的交互我們可以通過(guò) target-action的方式來(lái)處理,當(dāng)然UITextFieldDelegate也會(huì)告訴我們編輯時(shí)的各種變更事件。
此外,對(duì)于日常的輸入框場(chǎng)景,我們可能還需要在輸入框的左右提供一些快捷操作的按鈕,比如右側(cè)的清空按鈕,此時(shí)我們可以通過(guò)設(shè)置UITextField的 leftView Or RightView。
let overlayButton = UIButton(type: .custom)
let bookmarkImage = UIImage(systemName: "bookmark")
overlayButton.setImage(bookmarkImage, for: .normal)
overlayButton.addTarget(self, action: #selector(displayBookmarks),
for: .touchUpInside)
overlayButton.sizeToFit()
// Assign the overlay button to the text field
textField.leftView = overlayButton
textField.leftViewMode = .always
展示和隱藏鍵盤
當(dāng)一個(gè)UITextField 變成第一響應(yīng)者時(shí),系統(tǒng)會(huì)自動(dòng)彈起鍵盤,即調(diào)用becomeFirstResponder,與之對(duì)應(yīng)的 調(diào)用 resignFirstResponder 可以收起鍵盤。實(shí)際的研發(fā)中,我們也可以通過(guò)UIWindow 的 endEdit 方法在全局的任意地方快捷的收起鍵盤。
Note: 鍵盤的彈出及收起對(duì)應(yīng)的各種通知也可能需要我們?nèi)ヌ幚恚驗(yàn)殒I盤彈出時(shí)可能會(huì)遮蓋我們的頁(yè)面。鍵盤的相關(guān)通知這里就不再贅述了,有興趣的同學(xué)可以自行查詢
輸入內(nèi)容及配置
格式化輸入內(nèi)容一般通過(guò)設(shè)置NSAttributedString 的方式,比如常見(jiàn)的 文本的Font、顏色、或是自定義占位文字的樣式。對(duì)于一些特殊的場(chǎng)景,比如需要配置輸入框的截?cái)喾绞綖橛肋h(yuǎn)不展示省略號(hào)(正常的輸入框,持續(xù)輸入時(shí)即使超出控件的最大寬度,也會(huì)自動(dòng)向左移動(dòng),不會(huì)展示省略號(hào),當(dāng)時(shí)退出第一響應(yīng)者及失去焦點(diǎn)時(shí),輸入框自動(dòng)變成帶有省略號(hào)的截?cái)嗄J剑?/strong>。
這里還有一些非常實(shí)用的配置項(xiàng):
adjustsFontSizeToFitWidth,通過(guò)減少字號(hào)的方式來(lái)自適應(yīng)寬度以便盡可能多的展示內(nèi)容。
clearsOnBeginEditing 開(kāi)始輸入時(shí) 清空舊的內(nèi)容 (這里還有個(gè) clearsOnInsertion)
borderStyle 配置輸入框的 邊框樣式
inputView 通過(guò)自定義鍵盤的 inputView 的方式,來(lái)變更當(dāng) 該TextField 變成第一響應(yīng)者時(shí)彈起的鍵盤的樣式
markedTextRange 高亮的文本(可用于 中文輸入時(shí)判斷是否處于拼音輸入時(shí)的高亮狀態(tài))
UITextFieldDelegate
使用 UITextField 的場(chǎng)景時(shí)常需要我們對(duì)輸入的內(nèi)容進(jìn)行校驗(yàn),或是對(duì)整個(gè)編輯輸入的過(guò)程進(jìn)行管理,此時(shí)就需要我們對(duì)UITextFieldDelegate 進(jìn)行深入研究。常見(jiàn)的場(chǎng)景包括 限制用戶輸入文本的長(zhǎng)度,輸入時(shí)可能產(chǎn)生的提示等等。
全部的代理方法可以查看:UITextFieldDelegate
iOS 分詞處理
在輸入框作為搜索的場(chǎng)景中,我們時(shí)常需要對(duì)輸入的內(nèi)容進(jìn)行分詞處理。具體的代碼參考:iOS 分詞處理