87 lines
3.5 KiB
Swift
87 lines
3.5 KiB
Swift
//
|
|
// CommonTextFieldSearch.swift
|
|
// Wallet
|
|
//
|
|
// Created by Saveliy Stavitsky on 2/9/21.
|
|
// Copyright © 2021 AM. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
@objc protocol CommonTextFieldSearchDelegate: AnyObject {
|
|
@objc optional func textFieldShouldBeginEditing(_ textField: CommonTextFieldSearch) -> Bool
|
|
@objc optional func textFieldShouldEndEditing(_ textField: CommonTextFieldSearch) -> Bool
|
|
@objc optional func textField(_ textField: CommonTextFieldSearch, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
|
|
@objc optional func textFieldShouldClear(_ textField: CommonTextFieldSearch) -> Bool
|
|
@objc optional func textFieldDidChange(_ textField: CommonTextFieldSearch)
|
|
}
|
|
|
|
class CommonTextFieldSearch: CommonViewCustom {
|
|
|
|
@IBOutlet private var searchImageView: UIImageView!
|
|
@IBOutlet private var searchTextField: UITextField!
|
|
@IBOutlet var clearButtton: UIButton!
|
|
|
|
@IBOutlet weak var delegate: CommonTextFieldSearchDelegate?
|
|
|
|
@IBInspectable public var lzPlaceholder: String? {
|
|
get { searchTextField.placeholder }
|
|
set { searchTextField.attributedPlaceholder = newValue?.localized.attributed(style: .medium, size: 14, color: Asset.textPebble.color) }
|
|
}
|
|
|
|
@IBInspectable var text: String? {
|
|
get { searchTextField.text }
|
|
set { searchTextField.text = newValue }
|
|
}
|
|
|
|
var keyboardType: UIKeyboardType {
|
|
get { searchTextField.keyboardType }
|
|
set { searchTextField.keyboardType = newValue }
|
|
}
|
|
|
|
override func setup() {
|
|
super.setup()
|
|
|
|
searchTextField.clearButtonMode = .never
|
|
searchTextField.font = .font(style: .medium, size: 14)
|
|
searchTextField.textColor = Asset.textGranite.color
|
|
searchTextField.delegate = self
|
|
}
|
|
|
|
@IBAction func clearPressed(_ sender: Any) {
|
|
searchTextField.text = ""
|
|
searchTextField.resignFirstResponder()
|
|
clearButtton.isHidden = true
|
|
_ = delegate?.textFieldShouldClear?(self)
|
|
delegate?.textFieldDidChange?(self)
|
|
}
|
|
|
|
@discardableResult override func resignFirstResponder() -> Bool { searchTextField.resignFirstResponder() }
|
|
override var isFirstResponder: Bool { searchTextField.isFirstResponder }
|
|
@discardableResult override func becomeFirstResponder() -> Bool { searchTextField.becomeFirstResponder() }
|
|
|
|
}
|
|
|
|
extension CommonTextFieldSearch: UITextFieldDelegate {
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { delegate?.textFieldShouldBeginEditing?(self) ?? true }
|
|
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool { delegate?.textFieldShouldEndEditing?(self) ?? true }
|
|
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
|
if let value = delegate?.textField?(self, shouldChangeCharactersIn: range, replacementString: string) {
|
|
if value {
|
|
textField.text = (textField.text ?? "").replacingCharacters(in: range, with: string)
|
|
clearButtton.isHidden = textField.text?.isEmpty ?? true
|
|
delegate?.textFieldDidChange?(self)
|
|
return false
|
|
} else {
|
|
clearButtton.isHidden = textField.text?.isEmpty ?? true
|
|
delegate?.textFieldDidChange?(self)
|
|
return false
|
|
}
|
|
}
|
|
textField.text = (textField.text ?? "").replacingCharacters(in: range, with: string)
|
|
clearButtton.isHidden = textField.text?.isEmpty ?? true
|
|
delegate?.textFieldDidChange?(self)
|
|
return false
|
|
}
|
|
}
|