我尝试使用自定义xib文件。但是那些UI没有在xcode中的主视图控制器中显示。但它显示运行应用程序时。我已经在课堂上添加了@IBDesignable。这就是我做的。
我创建了TestView.xib并添加了一些设计
我创建了TestView.swift
我使用自定义类中的TestView更新了TestView.xib的fileOwner
我在testView.swift
import UIKit
@IBDesignable class DetailView: UIView {
override init(frame: CGRect){
super.init(frame: frame)
self.setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.setup()
}
func setup() {
let view = Bundle.main.loadNibNamed("TestView", owner: self, options: nil)?.first as! UIView
view.frame = self.bounds
self.addSubview(view)
}
}
并在MainViewController中的UIView上添加,并使用自定义类名链接到TestView。
之后我运行应用程序,我可以从testView看到UI。 Image of emulator and result
如何在MainViewController中启用自定义UI?感谢
答案 0 :(得分:5)
在InterfaceBuilder中选择您的ViewController并选择“Editor - > Refresh all Views”。然后你的自定义视图会出现。
如果出现问题,可以通过在代码中设置断点来调试IBDesignable类,然后选择“Editor - > Debug selected views”。
如果在InterfaceBuilder中需要特殊的设计外观,则只需要实现 prepareForInterfaceBuilder()
。
有时需要清理项目并构建文件夹以使其工作:
项目 - >清洁
项目 - >(按住选项键) - >清理构建文件夹
答案 1 :(得分:2)
我刚刚更改了设置功能。它现在正在运作。 Final Result Image - It showing UI in IB
func setup() {
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))
self.addSubview(view)
}
func loadViewFromNib() -> UIView {
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: "TestView", bundle: bundle)
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
答案 2 :(得分:0)
实时覆盖以下两个功能:
override open func prepareForInterfaceBuilder() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}
override open func awakeFromNib() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}