inf*_*ker 88 login image uitextfield ios swift
我想在UITextField中添加图标/图像.图标/图像应留给占位符.
我试过这个:
var imageView = UIImageView();
var image = UIImage(named: "email.png");
imageView.image = image;
emailField.leftView = imageView;
Run Code Online (Sandbox Code Playgroud)
谢谢.
Mar*_*ens 117
Sahil有一个很好的答案,我希望将其扩展为@IBDesignable,以便开发人员可以在故事板上的UITextFields中添加图像.
import UIKit
@IBDesignable
class DesignableUITextField: UITextField {
// Provides left padding for images
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var textRect = super.leftViewRect(forBounds: bounds)
textRect.origin.x += leftPadding
return textRect
}
@IBInspectable var leftImage: UIImage? {
didSet {
updateView()
}
}
@IBInspectable var leftPadding: CGFloat = 0
@IBInspectable var color: UIColor = UIColor.lightGray {
didSet {
updateView()
}
}
func updateView() {
if let image = leftImage {
leftViewMode = UITextField.ViewMode.always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
// Note: In order for your image to use the tint color, you have to select the image in the Assets.xcassets and change the "Render As" property to "Template Image".
imageView.tintColor = color
leftView = imageView
} else {
leftViewMode = UITextField.ViewMode.never
leftView = nil
}
// Placeholder text color
attributedPlaceholder = NSAttributedString(string: placeholder != nil ? placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: color])
}
}
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
这个可设计允许您:
笔记
Mar*_*kus 100
尝试添加 emailField.leftViewMode = UITextFieldViewMode.Always
(默认leftViewMode
是Never
)
更新了Swift 4的答案
emailField.leftViewMode = UITextFieldViewMode.always
emailField.leftViewMode = .always
Run Code Online (Sandbox Code Playgroud)
Sah*_*hil 48
我只想在这里添加更多内容:
如果要UITextField
在左侧添加图像使用leftView
属性UITextField
注意: 不要忘记设置leftViewMode
到UITextFieldViewMode.Always
和右rightViewMode
至UITextFieldViewMode.Always and
默认是UITextFieldViewModeNever
例如
用于在左侧添加图像
textField.leftViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.leftView = imageView
Run Code Online (Sandbox Code Playgroud)
用于在右侧添加图像
textField.rightViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.rightView = imageView
Run Code Online (Sandbox Code Playgroud)
注意:UITextField
在左侧或右侧添加图像时需要注意的一些事项.
不要忘记给出一个ImageView
你要添加的框架UITextField
让imageView = UIImageView(框架:CGRect(x:0,y:0,宽度:20,高度:20))
如果您的图像背景为白色,则图像将不可见 UITextField
如果要将图像添加到需要添加ImageView
为子视图的特定位置UITextField
.
更新Swift 3.0
@Mark Moeykens精美地消耗它并使其成为@IBDesignable.
我在这里修改并添加了一些功能(为右图添加底线和填充).
注意如果要在右侧添加图像,可以在界面构建器中选择该Force Right-to-Left
选项semantic
(但是,在覆盖rightViewRect方法之前,右图像填充将不起作用).
我修改了这个,可以从这里下载源ImageTextField
Ins*_*sou 17
另一种方式,灵感来自以前的帖子,以进行扩展.
我们可以将图像放在右侧或左侧
extension UITextField {
enum Direction {
case Left
case Right
}
// add image to textfield
func withImage(direction: Direction, image: UIImage, colorSeparator: UIColor, colorBorder: UIColor){
let mainView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
mainView.layer.cornerRadius = 5
let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
view.backgroundColor = .white
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 = .scaleAspectFit
imageView.frame = CGRect(x: 12.0, y: 10.0, width: 24.0, height: 24.0)
view.addSubview(imageView)
let seperatorView = UIView()
seperatorView.backgroundColor = colorSeparator
mainView.addSubview(seperatorView)
if(Direction.Left == direction){ // image left
seperatorView.frame = CGRect(x: 45, y: 0, width: 5, height: 45)
self.leftViewMode = .always
self.leftView = mainView
} else { // image right
seperatorView.frame = CGRect(x: 0, y: 0, width: 5, height: 45)
self.rightViewMode = .always
self.rightView = mainView
}
self.layer.borderColor = colorBorder.cgColor
self.layer.borderWidth = CGFloat(0.5)
self.layer.cornerRadius = 5
}
}
Run Code Online (Sandbox Code Playgroud)
使用 :
if let myImage = UIImage(named: "my_image"){
textfield.withImage(direction: .Left, image: myImage, colorSeparator: UIColor.orange, colorBorder: UIColor.black)
}
Run Code Online (Sandbox Code Playgroud)
请享用 :)
Mau*_*tel 11
对于Swift 3.0,在textField的左侧添加图像
textField.leftView = UIImageView(image: "small-calendar")
textField.leftView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20)
textField.leftViewMode = .always
Run Code Online (Sandbox Code Playgroud)
小智 9
为了创建填充,我喜欢将图像放置在容器视图内。对图标放置满意后,可以删除背景色。
let imageView = UIImageView(frame: CGRect(x: 8.0, y: 8.0, width: 24.0, height: 24.0))
let image = UIImage(named: "my_icon")
imageView.image = image
imageView.contentMode = .scaleAspectFit
imageView.backgroundColor = UIColor.red
let view = UIView(frame: CGRect(x: 0, y: 0, width: 32, height: 40))
view.addSubview(imageView)
view.backgroundColor = .green
textField.leftViewMode = UITextFieldViewMode.always
textField.leftView = view
Run Code Online (Sandbox Code Playgroud)
斯威夫特 5
@IBOutlet weak var paswd: UITextField! {
didSet{
paswd.setLeftView(image: UIImage.init(named: "password")!)
paswd.tintColor = .darkGray
paswd.isSecureTextEntry = true
}
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了扩展
extension UITextField {
func setLeftView(image: UIImage) {
let iconView = UIImageView(frame: CGRect(x: 10, y: 10, width: 25, height: 25)) // set your Own size
iconView.image = image
let iconContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 45))
iconContainerView.addSubview(iconView)
leftView = iconContainerView
leftViewMode = .always
self.tintColor = .lightGray
}
}
Run Code Online (Sandbox Code Playgroud)
结果
关于苹果的这种疯狂。
这可能是“最清晰”、最简单的方法:
首先,您必须正确移动文本。
注意这个关键的 QA:https : //stackoverflow.com/a/27066764/294884
class TidyTextField: UITextField {
@IBInspectable var leftImage: UIImage? = nil
@IBInspectable var leftPadding: CGFloat = 0
@IBInspectable var gapPadding: CGFloat = 0
private var textPadding: UIEdgeInsets {
let p: CGFloat = leftPadding + gapPadding + (leftView?.frame.width ?? 0)
return UIEdgeInsets(top: 0, left: p, bottom: 0, right: 5)
}
override open func textRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: textPadding)
}
override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: textPadding)
}
override open func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: textPadding)
}
Run Code Online (Sandbox Code Playgroud)
继续,我们现在必须制作并移动左图:
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var r = super.leftViewRect(forBounds: bounds)
r.origin.x += leftPadding
return r
}
override func layoutSubviews() {
super.layoutSubviews()
setup()
}
private func setup() {
if let image = leftImage {
if leftView != nil { return } // critical!
let im = UIImageView()
im.contentMode = .scaleAspectFit
im.image = image
leftViewMode = UITextField.ViewMode.always
leftView = im
} else {
leftViewMode = UITextField.ViewMode.never
leftView = nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎是最清晰、最可靠的方法。
使用 Swift4 中的扩展,我们可以轻松地将图像放在右侧或左侧,并填充到 TextField。
extension UITextField {
//MARK:- Set Image on the right of text fields
func setupRightImage(imageName:String){
let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
imageView.image = UIImage(named: imageName)
let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
imageContainerView.addSubview(imageView)
rightView = imageContainerView
rightViewMode = .always
self.tintColor = .lightGray
}
//MARK:- Set Image on left of text fields
func setupLeftImage(imageName:String){
let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
imageView.image = UIImage(named: imageName)
let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
imageContainerView.addSubview(imageView)
leftView = imageContainerView
leftViewMode = .always
self.tintColor = .lightGray
}
}
Run Code Online (Sandbox Code Playgroud)
使用代码作为左图像设置:-
self.password_text_field.setupLeftImage(imageName: "unlock")
Run Code Online (Sandbox Code Playgroud)
输出 :)
归档时间: |
|
查看次数: |
84713 次 |
最近记录: |