//
|
// YYTextField.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/5/27.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import Foundation
|
|
@IBDesignable class YYTextField: UITextField {
|
|
/// 最大可输入字数
|
@IBInspectable var maximumLength: Int = 0
|
|
/// 最大偏移
|
@IBInspectable var maximumOffset: Int = 0 {
|
didSet{
|
self.leftView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: maximumOffset, height: 0))
|
self.leftViewMode = .always
|
}
|
}
|
|
private var realDelegate: UITextFieldDelegate?
|
|
override var delegate: UITextFieldDelegate? {
|
get {
|
return realDelegate
|
}
|
set {
|
realDelegate = newValue
|
}
|
}
|
|
|
deinit {
|
NotificationCenter.default.removeObserver(self)
|
}
|
|
required init?(coder aDecoder: NSCoder) {
|
super.init(coder: aDecoder)
|
|
initialization()
|
}
|
|
override init(frame: CGRect) {
|
super.init(frame: frame)
|
|
initialization()
|
}
|
|
private func initialization() {
|
super.delegate = self
|
addTarget(self, action: #selector(textFieldTextDidChange(sender:)), for: .editingChanged)
|
}
|
|
@objc private func textFieldTextDidChange(sender: UITextField) {
|
|
let string = text
|
let inputMode = textInputMode?.primaryLanguage; // 键盘输入模式
|
|
if (maximumLength > 0) {
|
|
if (inputMode == "zh-Hans") {
|
|
let selectedRange: UITextRange? = markedTextRange
|
|
if selectedRange == nil {
|
|
let substring = string!.prefix(maximumLength)
|
|
text = String(substring)
|
}
|
|
} else {
|
|
if (string?.count ?? 0) > maximumLength {
|
|
let substring = string!.prefix(maximumLength)
|
text = String(substring)
|
}
|
}
|
}
|
|
}
|
|
}
|
extension YYTextField: UITextFieldDelegate {
|
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
if let delegate = realDelegate, delegate.responds(to: #selector(textFieldShouldBeginEditing(_:))) {
|
return (delegate.textFieldShouldBeginEditing?(textField))!
|
} else {
|
return true
|
}
|
}
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
if string == "\n"{
|
textField.resignFirstResponder()
|
}
|
if let delegate = realDelegate, delegate.responds(to: #selector(textField(_:shouldChangeCharactersIn:replacementString:))) {
|
return delegate.textField!(textField, shouldChangeCharactersIn: range, replacementString: string)
|
} else {
|
return true
|
}
|
}
|
}
|