@IBDesignable no funciona en iOS swift 3

Lo que hice: datos derivados eliminados, Xcode reinicio, Editor-> Refresh all views

Estoy haciendo que la construcción de Designables fallara en el guión gráfico cuando hago clic en Editor-> Refresh all views .

introduzca la descripción de la imagen aquí

Por favor revise el siguiente código. ¿Qué me estoy perdiendo? Textfiled no se actualiza en el guión gráfico cuando cambio el valor @IBInspectable del inspector de attributes.

 import UIKit import QuartzCore @IBDesignable class BordenetworkingFloatingTF: UITextField { requinetworking init?(coder aDecoder:NSCoder) { super.init(coder:aDecoder) setup() } override init(frame:CGRect) { super.init(frame:frame) setup() } override func textRect(forBounds bounds: CGRect) -> CGRect { return bounds.insetBy(dx: 20, dy: 0) } override func editingRect(forBounds bounds: CGRect) -> CGRect { return textRect(forBounds: bounds) } override func prepareForInterfaceBuilder() { super.prepareForInterfaceBuilder() setup() } // properties.. @IBInspectable var enableTitle : Bool = false @IBInspectable var borderColor: UIColor = UIColor.white { didSet { layer.borderColor = borderColor.cgColor } } @IBInspectable var borderWidth: Int = 1 { didSet { layer.borderWidth = CGFloat(borderWidth) } } @IBInspectable var placeHolderColor: UIColor = UIColor.white { didSet { self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: placeHolderColor]) } } fileprivate func setup() { borderStyle = UITextBorderStyle.none layer.borderWidth = CGFloat(borderWidth) layer.borderColor = borderColor.cgColor placeHolderColor = UIColor.white } } 

Prueba esto

! [ingrese la descripción de la imagen aquí

 import QuartzCore @IBDesignable class BordenetworkingFloatingTF: UITextField { requinetworking init?(coder aDecoder:NSCoder) { super.init(coder:aDecoder) setup() } override init(frame:CGRect) { super.init(frame:frame) setup() } override func textRect(forBounds bounds: CGRect) -> CGRect { return bounds.insetBy(dx: 20, dy: 0) } override func editingRect(forBounds bounds: CGRect) -> CGRect { return textRect(forBounds: bounds) } // properties.. @IBInspectable var enableTitle : Bool = false @IBInspectable var borderColor: UIColor = UIColor.white { didSet { layer.borderColor = borderColor.cgColor } } @IBInspectable var borderWidth: Int = 1 { didSet { layer.borderWidth = CGFloat(borderWidth) } } @IBInspectable var placeHolderColor: UIColor = UIColor.white { didSet { self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: placeHolderColor]) } } func setup() { borderStyle = UITextBorderStyle.none layer.borderWidth = CGFloat(borderWidth) layer.borderColor = borderColor.cgColor placeHolderColor = UIColor.white } } 

Su IBDesignable e IBInspectables ambos funcionan bien.

Compruebe si es correcto Módulo especificado en el campo "Módulo". Ya está especificado "Plantilla1", ¿es correcto? intente también hacer que todas las properties @IBInspectable sean públicas

Trate de dejar solo esta parte:

 @IBDesignable class BordenetworkingFloatingTF: UITextField { // properties.. @IBInspectable var enableTitle : Bool = false @IBInspectable var borderColor: UIColor = UIColor.white { didSet { layer.borderColor = borderColor.cgColor } } @IBInspectable var borderWidth: Int = 1 { didSet { layer.borderWidth = CGFloat(borderWidth) } } @IBInspectable var placeHolderColor: UIColor = UIColor.white { didSet { self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSForegroundColorAttributeName: placeHolderColor]) } } 

}

En mi proyecto faltaba para establecer su valor Tipo. Tu problema no es eso. Pero para otras personas que están teniendo el mismo problema conmigo, quería explicar.

Ejemplo: estaba escribiendo como a continuación:

 @IBInspectable public var rowOrColoumnCount = 0 

Pero debería haber sido como:

 @IBInspectable public var rowOrColoumnCount : Int = 0 

Tuve este problema con una class personalizada cargando desde un xib. Finalmente tropezó con esta solución (tuvo que usar el package correcto para la class, en lugar de Bundle.main):

 @IBDesignable class DataEntryView: UIView { @IBOutlet var contentView: DataEntryView! @IBInspectable var hasError : Bool = false requinetworking init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.commonInit() } override init(frame: CGRect) { super.init(frame: frame) self.commonInit() } private func commonInit() { let bundle = Bundle.init(for: type(of: self)) bundle.loadNibNamed("DataEntryView", owner: self, options: nil) addSubview(contentView) contentView.translatesAutoresizingMaskIntoConstraints = false contentView.topAnchor.constraint(equalTo: self.topAnchor, constant: 0).isActive = true contentView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 0).isActive = true contentView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 0).isActive = true contentView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 0).isActive = true } } 
  1. Cambia la class personalizada a lo que era (UITextField?)
  2. Solo configure el propietario del file en el xib a BordenetworkingFloatingTF