Skip to content

Instantly share code, notes, and snippets.

@Ilesh
Last active October 7, 2019 10:54
Show Gist options
  • Save Ilesh/d6f3569cfa87c63d47384a1a846fb0a7 to your computer and use it in GitHub Desktop.
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.
//
// 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