MoviaBox/Thimra/Base/View/SPTextField.swift
2025-04-22 17:30:04 +08:00

143 lines
4.0 KiB
Swift

//
// SPTextField.swift
// Thimra
//
// Created by on 2025/4/17.
//
import UIKit
class SPTextField: UITextField {
///0
var maxNumber = 0
var currentNumber = 0
///
var isPhone: Bool = false
var textDidChange: ((_ text: String) -> Void)?
var sp_placeholder: String? {
set {
_createAttributedPlaceholder()
let newStr = NSMutableAttributedString(string: newValue ?? "")
newStr.font = self.sp_placeholderFont
newStr.color = self.sp_placeholderColor
_attributedPlaceholder = newStr
self.attributedPlaceholder = _attributedPlaceholder
}
get {
return _attributedPlaceholder?.string
}
}
var sp_placeholderFont: UIFont? {
set {
_createAttributedPlaceholder()
_attributedPlaceholder?.font = newValue
self.attributedPlaceholder = _attributedPlaceholder
}
get {
if let font = _attributedPlaceholder?.font {
return font
} else {
return self.font
}
}
}
var sp_placeholderColor: UIColor? {
set {
_createAttributedPlaceholder()
_attributedPlaceholder?.color = newValue
self.attributedPlaceholder = _attributedPlaceholder
}
get {
if let color = _attributedPlaceholder?.color {
return color
} else {
return .placeholderColor()
}
}
}
private var _attributedPlaceholder: NSMutableAttributedString?
private func _createAttributedPlaceholder() {
if self._attributedPlaceholder == nil {
_attributedPlaceholder = NSMutableAttributedString(string: "")
_attributedPlaceholder?.font = self.font
_attributedPlaceholder?.color = .placeholderColor()
self.attributedPlaceholder = _attributedPlaceholder
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
override init(frame: CGRect) {
super.init(frame: frame)
NotificationCenter.default.addObserver(self, selector: #selector(textDidChangeNotification(sender:)), name: UITextField.textDidChangeNotification, object: nil)
// var iq = self.iq
// iq.enableMode = .enabled
self.textColor = .colorFFFFFF()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension SPTextField {
@objc func textDidChangeNotification(sender: Notification){
guard let object = sender.object else { return }
if !(object is UITextField) {return}
if (object as! UITextField) != self {return}
let selectedRange: UITextRange? = self.markedTextRange
if selectedRange == nil {
if !self.isPhone {
if maxNumber > 0 {
if self.text?.count ?? 0 > self.maxNumber {
var string = self.text
string?.removeLast(self.text!.count - self.maxNumber)
self.text = string
}
}
if let textDidChange = textDidChange {
textDidChange(self.text ?? "")
}
} else {
// var newString = self.text?.replacingOccurrences(of: " ", with: "") ?? ""
//
// if newString.count > self.maxNumber {
// newString.removeLast(newString.count - self.maxNumber)
// }
//
// self.text = newString.formatToPhone()
// if let textDidChange = textDidChange {
// textDidChange(newString)
// }
}
self.currentNumber = self.text?.count ?? 0
}
}
}