ios - @IBDesignable 不适用于 iOS swift 3

标签 ios swift xcode ibdesignable

我做了什么: 删除派生数据,重新启动 xcode,Editor->Refresh all views

当我点击 Editor->Refresh all views 时, Storyboard中的 Designables 构建失败。

enter image description here

请检查以下代码。我错过了什么?当我从属性检查器更改 @IBInspectable 值时, Storyboard中的 Textfiled 未更新。

import UIKit
import QuartzCore

@IBDesignable
class BorderedFloatingTF: UITextField {


    required 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
    }
}

最佳答案

试试这个

![enter image description here

import QuartzCore

@IBDesignable
class BorderedFloatingTF: UITextField {


    required 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
    }
}

您的 IBDesignablesIBInspectables 都工作正常。

关于ios - @IBDesignable 不适用于 iOS swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44023888/

相关文章:

iphone - iTunes 无法从同步服务加载数据类信息

ios - 如何决定在 Xcode 8 中为 UIImageViews 提供什么图像分辨率?

c - 在 Xcode 中添加链接器标志

ios - Core Data 使用派生类上的谓词获取基类的数据

ios - 从不同的开始日开始一周

ios - NSDateFormatter "Month"3 个字母而不是完整的单词

ios - 解析仪表板设置

swift - 如何快速添加到 UILabel 的链接?

ios - swift 3.0 中的 Uibutton 问题

ios - 是否可以在纵向 View 上设计横向项目?