【发布时间】:2020-08-27 14:11:33
【问题描述】:
我正在尝试将自定义 UIView 添加到视图控制器。我以前做过,没有任何问题,所以我在这里很困惑。
我已正确配置文件所有者,已为自定义视图设置了所有必需的初始化方法等。对我来说,没有什么不合适的,所有配置都和以前一样。
当我运行代码时,没有调用任何自定义视图的 init 方法(在两者上都放置了断点)。当我将自定义视图作为 IBOutlet 添加到我的视图控制器中时,我收到一条错误消息:
“致命错误:在隐式展开可选值时意外发现 nil”。
这来自我的视图控制器中试图更改自定义视图颜色的一行。我假设是因为视图尚未初始化,所以它返回 nil。
那么关于为什么这个自定义视图没有被初始化的任何想法?
视图控制器:
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
}
}
【问题讨论】:
-
要么你的类和模块是错误的,请检查。在 ProductSearchViewController 故事板中
-
如果您真的在使用您显示的代码...您是否收到此行的错误
self.mainSearchView.backgroundColor = UIColor.yellow? -
@DonMag 是的,代码在这一行停止,虽然这是因为 mainSearchView 对象为 nil 造成的