在一些場景中,須要限制用戶的輸入字數,例如在textField裏進行控制(textView也相似,崩潰緣由也相同),如圖所示ios
系統會監聽文本輸入,須要注意的第一點是輸入法處於聯想輸入還未肯定提交的時候,對於第三方輸入法例如搜狗,聯想狀態下的輸入,是監聽不到,除非點擊肯定輸入到textField,纔會觸發changed事件。優化
但對於系統鍵盤,聯想狀態下的輸入也會監聽,這裏若是不處理就容易發生崩潰,例如當快要達到字數限制時,繼續輸入,此時textField.text =聯想輸入文字+textField已有文字,當textField.text超過字數限制時,就會截取限長部分賦值給textField.text,但這時輸入數據還沒提交,textField.text不容許改變,因而衝突產生,繼而致使崩潰。在iOS八、9沒有崩潰的緣由估計是系統作了優化處理,達到字數限制時,自動將限制範圍內的聯想文字肯定輸入到textField中。spa
解決辦法是判斷一下markedTextRange是否爲nil,即沒有聯想狀態或高亮狀態下的文字時,再進行文字限長檢查或賦值blog