自定义视图 (xib) 在故事板上不可见

rga*_*ber 5 xib ios xcode-storyboard swift

我有一个自定义视图xib,其中有多个TableViews. 我将它ViewController作为嵌套视图加载到 a中:

ViewController
   |_ View
       |_ View (This is where I load my Custom View)
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序时,我可以在屏幕上看到空表,所以我的 xib 加载正确。
到现在为止还挺好。

我的问题是,我无法在故事板中看到我的表格。所以我无法ctrl+drag 并继续进行。

如何在故事板视图中看到我的自定义视图?

Gen*_*ani 6

例如,我们有TopView(我的 CustomView):

\n\n
    \n
  1. TopView.xib ,在File\'s Owner中设置 TopView 类

    \n\n

    Xcode 中的顶部视图

  2. \n
  3. TopView.swift

  4. \n
\n\n

注意:不要忘记@IBDesignable 标签。

\n\n
import UIKit\n@IBDesignable\nclass TopView: UIView {\n\n    //MARK:- IB Outlets\n    var contentView:UIView?\n\n    //MARK:- Lifecycle\n    override func awakeFromNib() {\n        super.awakeFromNib()\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n        setupThisView()\n    }\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        setupThisView()\n    }\n\n    override func prepareForInterfaceBuilder() {\n        super.prepareForInterfaceBuilder()\n        setupThisView()\n        contentView?.prepareForInterfaceBuilder()\n    }\n\n    //MARK:- Lifecycle methods\n    private func setupThisView(){\n        guard let view = loadViewFromNib() else { return }\n        view.frame = bounds\n        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]\n        addSubview(view)\n        contentView = view\n    }\n\n    func loadViewFromNib() -> UIView? {\n        let nibName = String(describing: TopView.self)\n        let bundle = Bundle(for: type(of: self))\n        let nib = UINib(nibName: nibName, bundle: bundle)\n        return nib.instantiate(withOwner: self,options: nil).first as? UIView\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

3.在Storyboard中添加UIView,并将视图的类设置为TopView

\n\n

UIView 的自定义类

\n\n
\n

如果TopView尚未出现Storyboard中(通常会发生这种情况):

\n
\n\n
    \n
  1. 启用编辑器 -> 自动刷新视图
  2. \n
  3. 单击编辑器->刷新所有视图
  4. \n
\n\n
\n

仍然?

\n
\n\n
    \n
  1. 清理项目:\xe2\x8c\x98 + K
  2. \n
  3. 构建项目\xe2\x8c\x98 + B
  4. \n
\n\n

故事板结果: \nTopView 的故事板结果

\n


Cih*_*Tek 1

Storyboard 只能包含 ViewController 和 Segue。如果您想从 ViewController 访问 xib 中的某些内容来设置委托等,那么您必须通过代码来完成。UITableView例如,当目标ViewController位于 Storyboard 中且位于另一个 xib 中时,您无法从 IB 内设置 a 的委托UITableView