Files
raspberry/iOS/Wallet/Sources/Common/Control/TextField/Search/CommonTextFieldSearch.swift
T

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
}
}