Swift 自定义控件在视图控制器中使用时不显示(附代码)
Swift custom control is not showing when being used in view controller (code attached)
当我尝试在我的主视图控制器中使用此自定义控件时,通过将 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 视图中的快照:
只需在 class 行上方添加 @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
}
当我尝试在我的主视图控制器中使用此自定义控件时,通过将 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 视图中的快照:
只需在 class 行上方添加 @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
}