在视图控制器中使用时未显示Swift自定义控件(附加代码)

时间:2015-09-30 22:07:26

标签: ios swift interface-builder custom-controls loadnibnamed

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

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

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

NIB&屏幕截图swift文件

enter image description here代码

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视图中:

enter image description here

1 个答案:

答案 0 :(得分: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
}