【问题标题】:Custom view (xib) not visible on storyboard自定义视图 (xib) 在情节提要上不可见
【发布时间】:2015-04-14 05:23:09
【问题描述】:

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

ViewController
   |_ View
       |_ View (This is where I load my Custom View)

当我运行我的应用程序时,我可以在屏幕上看到空表,因此我的 xib 正在正确加载。
到目前为止,一切都很好。

我的问题是,我无法在情节提要中看到我的表格。所以我无法ctrl+拖动并继续前进。

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

【问题讨论】:

  • 您看不到情节提要内的 xib 视图。您可以使用文件的所有者来创建 IBOutlets 和 IBActions。
  • 不要忘记@IBDesignable !!!!
  • @FabioFelici,这是错误的。如今,这是完全可能的。 GentBerani 给出了确切的代码。干杯!
  • @Fattie 我觉得我评论的时候不可能,看看日期...
  • ciao,对@FabioFelici,注意我说的是“现在......”!干杯!

标签: ios swift xib xcode-storyboard


【解决方案1】:

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

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

  2. TopView.swift

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

import UIKit
@IBDesignable
class TopView: UIView {

    //MARK:- IB Outlets
    var contentView:UIView?

    //MARK:- Lifecycle
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupThisView()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setupThisView()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupThisView()
        contentView?.prepareForInterfaceBuilder()
    }

    //MARK:- Lifecycle methods
    private func setupThisView(){
        guard let view = loadViewFromNib() else { return }
        view.frame = bounds
        view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        addSubview(view)
        contentView = view
    }

    func loadViewFromNib() -> UIView? {
        let nibName = String(describing: TopView.self)
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: nibName, bundle: bundle)
        return nib.instantiate(withOwner: self,options: nil).first as? UIView
    }
}

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

如果 TopView 尚未出现在 Storyboard 中,那么(这通常会发生):

  1. 启用编辑器 -> 自动刷新视图
  2. 点击编辑器 -> 刷新所有视图

还是?

  1. 清理项目:⌘ + K
  2. 构建项目⌘ + B

故事板中的结果:

【讨论】:

    【解决方案2】:

    故事板只能包含 ViewController 和 Segue。如果您想从 ViewController 访问您的 xib 中的某些内容以设置委托等,那么您必须从代码中完成。例如,当目标 ViewController 在 Storyboard 中而 UITableView 在另一个 xib 中时,您不能在 IB 中设置 UITableView 的委托。

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2015-03-04
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 2015-11-14
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多