如何通过故事板使用自定义视图

时间:2017-09-26 15:17:26

标签: swift

我有一个在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()
    }
}

0 个答案:

没有答案