宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-07-05 0d8f5fc8a516bfd07e425909e4a4432600572ee7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//
//  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
        }
    }
}