我有一个在xib文件中设计的自定义视图,当我以编程方式将其添加到我的View Controller时,一切正常。但是如果通过storyboard添加它(我添加UIView然后将其子类化,请参阅image here)我收到:
致命错误:在从nib函数清醒时展开可选值时意外发现nil
以下是我的自定义视图中的代码:
class AutoCompleteTextView: UIView {
@IBOutlet var autoCompleteTableView: UITableView!
@IBOutlet var textField: UITextField!
var placeholderText: String? {
didSet {
initUI()
}
}
var searchResult = [String]() {
didSet {
autoCompleteTableView.reloadData()
}
}
weak var delegate: AutoCompleteTextViewDelegate?
let cellReuseIdentifier = "cell"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
let staticFrame = CGRect(x: frame.origin.x, y: frame.origin.y, width: 300, height: frame.height)
super.init(frame: staticFrame)
}
override func awakeFromNib() {
super.awakeFromNib()
clipsToBounds = true
autoCompleteTableView.delegate = self
autoCompleteTableView.dataSource = self
autoCompleteTableView.register(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
textField.delegate = self
initUI()
}
static func newInstance(placeholderText: String) -> AutoCompleteTextView {
guard let autoCompleteTextView = UINib(nibName: String(describing: AutoCompleteTextView.self), bundle: nil)
.instantiate(withOwner: self, options: nil).first as? AutoCompleteTextView else {
return AutoCompleteTextView()
}
autoCompleteTextView.placeholderText = placeholderText
return autoCompleteTextView
}
func initUI() {[enter image description here][1]
textField.placeholder = placeholderText ?? ""
autoCompleteTableView.tableFooterView = UIView() //In order to do not show emty cells
updateUI()
}
}