使用Storyboard从XIB加载UIView-视图的属性为nil

时间:2019-05-14 12:33:34

标签: ios xcode storyboard interface-builder xib

我已经创建了一个视图:

import UIKit

class TestNotWorkingView: UIView {
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
}

并与相应的XIB连接: xib

然后,我将视图添加到情节提要上的UIViewController中:

view on storyboard

class ViewController: UIViewController {
@IBOutlet weak var testNotWorkingView: TestNotWorkingView!
override func viewDidLoad() {
    super.viewDidLoad()
    print(testNotWorkingView)
    print(testNotWorkingView.label1)
}

}

运行应用程序时,仅显示父视图。没有可见的标签:

父视图:

  

可选(TestProject.TestNotWorkingView:0x7fb165e04610;框架=(0   0; 414 818);自动调整大小= RM + BM;层= CALayer:0x600001f254e0)

查询标签之一

  

我已经将TestNotWorkingView设置为视图的类和文件所有者。

我假设由于故事板上没有显示视图,因此不会在运行时创建和链接视图。

如何在Storyboard中创建的ViewController中使用XIB中创建的视图?可能吗?

Test Project that fully reproduces the issue

1 个答案:

答案 0 :(得分:0)

使用xib中设计的视图可能会有些棘手,您需要将此代码添加到TestNotWorkingView类中:

override func awakeAfter(using aDecoder: NSCoder) -> Any? {
    guard subviews.isEmpty else {
        return self
    }
    return Bundle.main.loadNibNamed("TestNotWorkingView", owner: nil, options: nil)?.first
}

编辑:同样,您应该将文件所有者保留为空,并将插座仅连接到TestNotWorkingView