swift - 在 Interface Builder 中设计自定义 View

标签 swift macos swift3 xcode8

这是我第一次使用自定义 View ,我很困惑如何继续。

我有一个自定义 View ,继承自 NSView,上面只有 3 个内容:一个 ImageView 和 2 个文本字段:

// MyCustomView.swift
import Cocoa

@IBDesignable class MyCustomView: NSView {
    @IBOutlet weak var imageView: NSImageView!
    @IBOutlet weak var titleField: NSTextField!
    @IBOutlet weak var subtitleField: NSTextField!

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
    }
}

我添加了一个 XIB 文件,设计了 View 并连接了所有 socket :

MyCustomView.xib

现在我的主 Storyboard添加了一个通用 View ,将其类更改为 MyCustomView 并连接了 socket 。这是 ViewController.swift 的代码:

// ViewController.swift
import Cocoa

class ViewController: NSViewController {
    @IBOutlet weak var customView: MyCustomView!

    override func viewDidLoad() {
        super.viewDidLoad()
        customView.titleField.stringValue = "This is a title"
    }
}

在运行时,我在 customeView.titleField.stringValue = ... 行上遇到了 fatal error :

fatal error: unexpectedly found nil while unwrapping an Optional value

如果我删除该行,应用程序会编译,但自定义 View 为空白。

所以我猜我的自定义设计没有继承自 MyCustomView.xib?我该如何纠正这个问题?我仔细检查了一下,所有 socket 都连接在 IB 中。

最佳答案

  1. 您的类是否在 UIView MyCustomView 的身份检查器中?
  2. IBOutlet 链接是否正确设置为 MyCustomView? (你的 Storyboard一侧)
  3. XIB 的文件所有者是否设置为 MyCustomView
  4. 您有 MyCustomView 的初始化程序吗? (覆盖 init(frame: CGRect) 或必需的 init?(coder aDecoder: NSCoder) )

关于swift - 在 Interface Builder 中设计自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526906/

相关文章:

macos - 无法在 macOS 上登录 Docker 帐户

python - 使用 Homebrew 软件在 Mac OS X 10.9 中构建 OpenCV_Python

iOS 共享扩展流程

swift - 单元测试中的竞争条件

SwiftSoup 从evaluateJavaScript 解析

ios - Parse PushError 141 invalid function 云代码

ios - 让 Firebase Cloud 消息传递快速运行

xcode - XPC 服务 NSCocoaError 域

ios - 将 Dictionary 转换为 Json 以在 Alamofire 中传递参数

ios - 如何在swift3中使用DACirularProgressView?