当我尝试在主视图控制器中使用此自定义控件时,通过将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视图中:
答案 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
}