UITextField右對齊時剑肯,會有以下問題:
1.第一個字符輸入空格,光標會跳到左側观堂;
2.如果先輸入其它字符退子,然后輸入空格,此時輸入的空格不會立即顯示型将,直到再次輸入其它字符時該空格會與輸入的字符同時顯示出來寂祥;
3.輸入內容末尾是空格時,結束輸入后七兜,空格不展示丸凭,只在編輯的時候顯示
解決方案1:
private lazy var contentTextField: UITextField = {
let textField = UITextField()
textField.font = UIFont.normalFont()
textField.textAlignment = .Right
textField.delegate = self
textField.addTarget(self, action: #selector(textChange(_:)), forControlEvents: .EditingChanged)
return textField
}()
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if range.location == textField.text?.length && string == " " {
textField.text = textField.text?.stringByAppendingString("\u{00a0}")
// 調用一次textChange(textField),解決攔截代理方法textField: shouldChangeCharactersInRange: replacementString:對于空格返回false時腕铸,不能監(jiān)聽UITextFieldTextDidChangeNotification的問題惜犀。
textChange(textField)
return false
}
return true
}
@objc private func textChange(textField : UITextField) {
guard let text = textField.text else {
return
}
// 使用時需要將空格替換回去
if let callBack = callBackOfTextFieldEndEditing {
let contentSpace = textField.text!.stringByReplacingOccurrencesOfString("\u{00a0}", withString: " ")
let content = contentSpace.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
callBack(text: content)
}
}
解決方案2:
private lazy var contentTextField: UITextField = {
let textField = UITextField()
textField.font = UIFont.normalFont()
textField.textAlignment = .Right
textField.addTarget(self, action: #selector(textChange(_:)), forControlEvents: .EditingChanged)
return textField
}()
@objc private func textChange(textField : UITextField) {
guard let text = textField.text else {
return
}
let range = textField.markedTextRange
if range != nil {
return
}
let textRange = textField.selectedTextRange
textField.text = text.stringByReplacingOccurrencesOfString(" ", withString: "\u{00a0}")
textField.selectedTextRange = textRange
// 使用時需要將空格替換回去
if let callBack = callBackOfTextFieldEndEditing {
let contentSpace = textField.text!.stringByReplacingOccurrencesOfString("\u{00a0}", withString: " ")
let content = contentSpace.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
callBack(text: content)
}
}