0

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

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

文本域设计

到目前为止,我能够使用 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 添加为右视图?如上图所示

4

0 回答 0