使用IBInspectable在UITextField中添加RightView UIButton

时间:2018-04-10 07:12:37

标签: ios swift uiview uitextfield ibinspectable

是否可以使用@IBInspectable将rightView UIButton添加到UITextField到StoryBoard?

我想使用StoryBoard在此图像中创建一个uiTextfield,以便将来更容易

TextField Design

到目前为止,我能够使用CornerRadius,Right Image和LeftView Image执行此IBDesignable类

import UIKit

@IBDesignable class UITextFieldX: UITextField {

@IBInspectable var leftImage: UIImage? {
    didSet {
        updateView()
    }
}   
@IBInspectable var leftPadding: CGFloat = 0 {
    didSet {
        updateView()
    }
}    
@IBInspectable var rightImage: UIImage? {
    didSet {
        updateView()
    }
}    
@IBInspectable var rightPadding: CGFloat = 0 {
    didSet {
        updateView()
    }
}
@IBInspectable var rightViewButton: Bool = false{
    didSet{
        updateView()
    }
}    
private var _isRightViewVisible: Bool = true
var isRightViewVisible: Bool {
    get {
        return _isRightViewVisible
    }
    set {
        _isRightViewVisible = newValue
        updateView()
    }
}    
func updateView() {
    setLeftImage()
    setRightImage()

    // Placeholder text color
    attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: tintColor])
}    
func setLeftImage() {
    leftViewMode = UITextFieldViewMode.always
    var view: UIView

    if let image = leftImage {
        let imageView = UIImageView(frame: CGRect(x: leftPadding, y: 0, width: 20, height: 20))
        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 = tintColor

        var width = imageView.frame.width + leftPadding

        if borderStyle == UITextBorderStyle.none || borderStyle == UITextBorderStyle.line {
            width += 5
        }

        view = UIView(frame: CGRect(x: 0, y: 0, width: width, height: 20))
        view.addSubview(imageView)
    } else {
        view = UIView(frame: CGRect(x: 0, y: 0, width: leftPadding, height: 20))
    }

    leftView = view
}

func setRightImage() {
    rightViewMode = UITextFieldViewMode.always

    var view: UIView

    if let image = rightImage, isRightViewVisible {
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
        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 = tintColor

        var width = imageView.frame.width + rightPadding

        if borderStyle == UITextBorderStyle.none || borderStyle == UITextBorderStyle.line {
            width += 5
        }

        view = UIView(frame: CGRect(x: 0, y: 0, width: width, height: 20))
        view.addSubview(imageView)

    } else {
        view = UIView(frame: CGRect(x: 0, y: 0, width: rightPadding, height: 20))
    }

    rightView = view
}


// MARK: - Corner Radius
@IBInspectable var cornerRadius: CGFloat = 0 {
    didSet {
        self.layer.cornerRadius = cornerRadius
    }
  }
}

是否可以使用IBInspectable在UITextview中添加UIButton作为右视图?如上图所示

0 个答案:

没有答案