Last active
October 7, 2019 10:54
-
-
Save Ilesh/d6f3569cfa87c63d47384a1a846fb0a7 to your computer and use it in GitHub Desktop.
Custom UITextfield class for manage image before Textfield and also add secure text hide show button.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// IPTextField.swift | |
// | |
// | |
// Created by Ilesh on 06/04/18. | |
// Copyright © 2019 Ilesh. All rights reserved. | |
// | |
import Foundation | |
import UIKit | |
//MARK:- DEAFULT CONFIGURATIONS | |
class IPTextField: UITextField { | |
// INIT | |
required init?(coder aDecoder: NSCoder) { | |
super.init(coder: aDecoder) | |
self.font = UIFont(name: Theme.Font.Regular, size: Theme.Font.size.TxtSize) ?? UIFont.systemFont(ofSize: Theme.Font.size.TxtSize) | |
self.leftView?.frame = CGRect(x: 30, y: 0, width: 35, height:35) | |
self.leftViewMode = .always | |
self.leftView?.contentMode = .scaleAspectFit | |
self.layer.masksToBounds = true | |
if self.tag == 901{ | |
self.textColor = Theme.color.text | |
self.tintColor = Theme.color.text | |
self.backgroundColor = UIColor.clear | |
self.layer.borderWidth = 1.0 | |
self.layer.borderColor = Theme.color.text.cgColor | |
self.layer.cornerRadius = 8.0 | |
} | |
else if self.tag == 902{ | |
self.textColor = Theme.color.textPlaceholderDark | |
self.backgroundColor = Theme.color.textFieldLightBG | |
self.placeHolderColor = Theme.color.textFieldBG | |
self.tintColor = Theme.color.textDark | |
} | |
else if self.tag == 903{ | |
self.textColor = Theme.color.textPlaceholderDark | |
self.backgroundColor = UIColor.white | |
self.placeHolderColor = Theme.color.textPlaceholderDark | |
self.tintColor = Theme.color.textDark | |
self.leftView = UIView() | |
self.leftView?.frame = CGRect(x: 5, y: 0, width: 20, height:35) | |
} | |
else if self.tag == 904{ | |
self.textColor = Theme.color.textPlaceholderDark | |
self.backgroundColor = UIColor.white | |
self.placeHolderColor = Theme.color.textPlaceholderDark | |
self.tintColor = Theme.color.textDark | |
self.leftView = UIView() | |
self.leftView?.frame = CGRect(x: 5, y: 0, width: 20, height:35) | |
self.layer.borderWidth = 1.0 | |
self.layer.borderColor = Theme.color.textFieldBG.cgColor | |
} | |
else if self.tag == 904{ | |
self.textColor = Theme.color.textDark | |
self.backgroundColor = Theme.color.textFieldLightBG | |
self.placeHolderColor = Theme.color.textPlaceholderDark | |
self.tintColor = Theme.color.textDark | |
self.leftView = UIView() | |
self.leftView?.frame = CGRect(x: 5, y: 0, width: 10, height:35) | |
} | |
else{ | |
self.textColor = Theme.color.text | |
self.tintColor = Theme.color.text | |
self.backgroundColor = Theme.color.textFieldBG | |
self.placeHolderColor = Theme.color.textPlaceholder | |
} | |
} | |
override func awakeFromNib() { | |
super.awakeFromNib() | |
setUpView() | |
} | |
override func prepareForInterfaceBuilder() { | |
super.prepareForInterfaceBuilder() | |
setUpView() | |
} | |
/** | |
Sets up the view. | |
*/ | |
func setUpView() { | |
self.layer.masksToBounds = true | |
if self.tag == 902{ | |
self.backgroundColor = UIColor.clear | |
self.placeHolderColor = Theme.color.textPlaceholder | |
self.layer.cornerRadius = self.frame.height/2 | |
}else if self.tag == 901{ | |
self.placeHolderColor = Theme.color.textPlaceholder | |
self.layer.cornerRadius = 8 | |
} | |
else if self.tag == 903{ | |
self.layer.cornerRadius = 15 | |
self.placeHolderColor = Theme.color.textPlaceholderDark | |
} | |
else{ | |
self.placeHolderColor = Theme.color.textPlaceholder | |
self.layer.cornerRadius = self.frame.height/2 | |
} | |
} | |
/** | |
Layout methos | |
*/ | |
override func layoutSubviews() { | |
super.layoutSubviews() | |
self.setUpView() | |
} | |
} | |
extension UITextField | |
{ | |
enum Direction | |
{ | |
case Left | |
case Right | |
} | |
func AddImage(direction:Direction,imageName:String,Frame:CGRect,backgroundColor:UIColor) | |
{ | |
let View = UIView(frame: Frame) | |
View.backgroundColor = backgroundColor | |
let imageView = UIImageView(frame: Frame) | |
imageView.image = UIImage(named: imageName) | |
View.addSubview(imageView) | |
if Direction.Left == direction | |
{ | |
self.leftViewMode = .always | |
self.leftView = View | |
} | |
else | |
{ | |
self.rightViewMode = .always | |
self.rightView = View | |
} | |
} | |
func withImage(direction: Direction, image: UIImage, colorSeparator: UIColor, colorBorder: UIColor){ | |
let mainView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: self.frame.height)) | |
//mainView.layer.cornerRadius = 5 | |
let view = UIView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height)) | |
view.backgroundColor = .clear | |
view.clipsToBounds = true | |
view.layer.cornerRadius = 5 | |
view.layer.borderWidth = CGFloat(0.5) | |
view.layer.borderColor = colorBorder.cgColor | |
mainView.addSubview(view) | |
let imageView = UIImageView(image: image) | |
imageView.contentMode = .center | |
imageView.frame = CGRect(x: 10.0, y: (view.frame.size.height/2) - 15, width: 30.0, height: 30.0) | |
view.addSubview(imageView) | |
let seperatorView = UIView() | |
seperatorView.backgroundColor = colorSeparator | |
mainView.addSubview(seperatorView) | |
if(Direction.Left == direction){ // image left | |
seperatorView.frame = CGRect(x: 40, y: 0, width: 5, height: self.frame.height) | |
self.leftViewMode = .always | |
self.leftView = mainView | |
} else { // image right | |
seperatorView.frame = CGRect(x: 0, y: 0, width: 5, height: self.frame.height) | |
self.rightViewMode = .always | |
self.rightView = mainView | |
} | |
//self.layer.borderColor = #colorLiteral(red: 0.6431372549, green: 0.6431372549, blue: 0.6431372549, alpha: 1) | |
//self.layer.borderWidth = CGFloat(0.5) | |
self.layer.cornerRadius = self.frame.height/2 | |
} | |
func addRightView(img:UIImage,selected:UIImage){ | |
if let rightButton = self.rightView, rightButton is UIButton { | |
print("Button exist") | |
return | |
} | |
let button = UIButton(type: .custom) | |
button.setImage(img, for: .normal) | |
button.setImage(selected, for: .selected) | |
button.frame = CGRect(x: CGFloat(self.frame.size.width - self.height), y: CGFloat(5), width: self.height, height: self.height) | |
button.removeTarget(self, action: nil, for: .allEvents) | |
button.addTarget(self, action: #selector(secureMode(_:)), for: .touchUpInside) | |
self.rightView = button | |
self.rightView?.bringSubviewToFront(self) | |
self.rightViewMode = .always | |
} | |
@objc func secureMode(_ sender: UIButton) { | |
print("textfield right button") | |
DispatchQueue.main.async { | |
if sender.isSelected { | |
sender.isSelected = false | |
self.isSecureTextEntry = true | |
}else{ | |
sender.isSelected = true | |
self.isSecureTextEntry = false | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment