我正在尝试向视图控制器添加一个自定义的UIView。我以前这样做过,没有任何问题,所以我在这里非常困惑。
我已经正确地配置了文件所有者,已经为自定义视图设置了所有必需的init方法等。在我看来没有什么不对劲的地方,所有的配置都和以前完全一样。
当我运行代码时,两个自定义视图init方法都没有被调用(在这两个方法上都放置了断点)。当我将自定义视图作为IBOutlet添加到视图控制器中时,我收到一个错误消息:
“致命错误:隐式展开可选值时意外发现nil”。
这来自于我的视图控制器中试图改变自定义视图颜色的一行代码。我假设是因为视图还没有初始化,所以它返回nil。
那么为什么这个自定义视图没有被初始化,你有什么想法吗?
ViewController:
class ProductSearchViewController: UINavigationController {
@IBOutlet weak var mainSearchView: MainSearchView!
override func viewDidLoad() {
super.viewDidLoad()
applyTheme()
setupNavigationBar()
// Do any additional setup after loading the view.
}
func applyTheme() {
self.view.backgroundColor = UIColor.init(named: "appPrimaryColour")
self.mainSearchView.backgroundColor = UIColor.yellow
}
func setupNavigationBar() {
self.title = NSLocalizedString("product.search.tab.bar.item.title", comment: "")
self.navigationBar.isHidden = true
}
}自定义视图:
import UIKit
class MainSearchView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var searchBar: UITextField!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
func commonInit() {
let xib = UINib(nibName: "MainSearchView", bundle: nil)
xib.instantiate(withOwner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
contentView.backgroundColor = UIColor.blue
}
}发布于 2020-08-28 02:49:31
ProductSearchViewController是从UINavigationController扩展而来的,如果它是从UIViewController扩展而来的,那么你的问题就解决了。
https://stackoverflow.com/questions/63617915
复制相似问题