0

当我尝试在主视图控制器中使用此自定义控件时,通过将 UIView 拖到 IB 中的屏幕并将其设置为“CustomerControlView”,它实际上并没有显示它。

问题 - 我这里的代码有什么问题?

背景 - 所以基本上想要:a)在 IB 中设计一个客户控件 b)所以我假设我创建了 NIB 文件,然后创建了一个 UIView 文件,所以这就是我所做的

NIB 和 swift 文件的屏幕截图

在此处输入图像描述 代码

import UIKit

class CustomControlView: UIView {

//    @IBOutlet var icon: UIImageView!
//    @IBOutlet weak var view: UIView!

    @IBOutlet weak var button: UIButton!
    @IBOutlet weak var text1: UITextField!
    @IBOutlet weak var text2: UITextField!

    override init(frame: CGRect) {
        print("override init(frame: CGRect) ")
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        print("required init?(coder aDecoder: NSCoder)")
        super.init(coder: aDecoder)

//        let arr = NSBundle.mainBundle().loadNibNamed("CustomControlView", owner: nil, options: nil)
//        let v = arr[0] as! UIView
//        self.view.addSubview(v)
    }


}

显示我如何将自定义视图包含到我的主 viewController 视图中的快照:

在此处输入图像描述

4

1 回答 1

4

只需@IBDesignable在类行上方添加以告诉 Xcode 在将其显示在故事板中之前对其进行编译。这里有关于这个主题的精彩讨论:http: //nshipster.com/ibinspectable-ibdesignable/

此外,您需要确保正在加载 NIB:

override init(frame: CGRect) {
    print("override init(frame: CGRect) ")
    super.init(frame: frame)
    xibSetup()
}

required init?(coder aDecoder: NSCoder) {
    print("required init?(coder aDecoder: NSCoder)")
    super.init(coder: aDecoder)

    xibSetup()

}


func xibSetup() {
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    addSubview(view)
}

func loadViewFromNib() -> UIView {
    let bundle = NSBundle(forClass: self.dynamicType)
    let nib = UINib(nibName: "CustomNumberPad", bundle: bundle)
    let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
    return view
}
于 2015-09-30T22:50:11.617 回答