【问题标题】:Using Xcode and Interface Builder to create prototype views使用 Xcode 和 Interface Builder 创建原型视图
【发布时间】:2015-10-23 22:40:25
【问题描述】:

我正在构建一个 NSView,它是一种集合视图,但它不是表格或网格,而是一个图形编辑器(类似于石英作曲家)。

我现在面临的问题是我想从xib 文件加载原型视图(用于节点)。就像 UITableView 和 UICollectionView 如何让您在 Interface Builder 中设计原型单元格一样。但是这些对象是如何在多个副本中实例化的呢?

UITableViewController 等如何?人。实现这个?

我考虑过的解决方案:

  • 复制视图,但NSView 不支持NSCopying“开箱即用”。这似乎是迄今为止最合乎逻辑的。如果您想将 NSView 保留在 storyboard 而不是 xib 中,这似乎也是唯一的选择。
  • 加载一个笔尖,然后多次发送[nib instantiateNibWithOwner:self topLevelObjects:nil]
  • NSView 确实支持 NSCoding,但使用它更像是一种 hack。

还有什么想法吗?

我正在开发 Mac OS X 应用程序,而不是 iOS 应用程序。

【问题讨论】:

    标签: objective-c xcode macos cocoa


    【解决方案1】:

    你是对的,通过NSCoding 实现NSCopying 确实感觉像是一种 hack,但它可能是最快和最可靠的编码方式。

    Copy NSView in cocoa / objective-c“相关文案/代码解答”

    您可以将您的视图作为任何给定场景的顶级对象放在情节提要中。确保你有从那个场景的控制器/加载器到它的出口。您可能会将其打包到 NSData 中,然后为您想要制作/取消归档的每个“副本”保留它。

    【讨论】:

    • 真的吗?你认为这比“加载一个笔尖然后多次发送[nib instantiateNibWithOwner:self topLevelObjects:nil]”更好吗?我的意思是,这就是 nib 的含义:一种将一大堆视图一起实例化的方式,你喜欢多少次都可以。最好还是克服所有使视图层次结构可复制的麻烦?
    • 确实更喜欢您的nib?.instantiate(withOwner: self, topLevelObjects: nil)(随意将其翻译为 Swift)模型。我不确定实际的实施细节。如果所涉及的文件未缓存,则此选项可能会慢得多。而将原型保存在 Data 对象中则保证在内存中。实际上,我怀疑运行时的影响会很明显。 (我认为这是同样快速且可能同样可靠。)
    • 我也可以使用 nib?.instantiate(withOwner: nil, topLevelObjects: objects) 并传入一个可变数组来返回视图,不需要所有者或该所有者中的出口来获取对新实例化视图的引用。
    • “我不确定实际的实现细节” 更有理由不说复制更好。你推荐归档和复制,你担心实例化一个 nib 可能是重量级的???
    猜你喜欢
    • 2011-04-16
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多