【发布时间】:2017-06-27 20:12:10
【问题描述】:
我看过很多关于如何在 Interface Builder 中创建自定义视图的教程。所有都是针对iOS的,但MacOS应该是相似的,不是吗?我尝试了一些方法,但没有一个是完全成功的。 init(coder:) 调用 NIB 实例化(通过 Bundle.main.loadNibNamed 或 NSNib 依次调用 init(coder:) 并在我将 nib 中的主视图归类为自定义类时以无限递归结束
如果我使用标准类,则将文件的所有者设为我的自定义类,效果更好但仍然不正确。
是否有一个使用 AppKit 创建自定义控件的示例?我来的最接近的显示自定义控件,但没有任何自动布局设置工作。
应该很简单,但我还没弄明白。
这是我目前所拥有的:
- 一个新的 MyControl 类
import Cocoa
@IBDesignable
class MyControl: NSView {
@IBOutlet var customView: NSView! // The top level NSView
@IBOutlet weak var insideButton: NSButton! // The button inside the view
let myName: String
required init?(coder: NSCoder) {
super.init(coder: coder)
if Bundle.main.loadNibNamed("MyControl", owner: self, topLevelObjects: nil) {
addSubview(customView)
}
}
}
基于 NSView 的 nib 包含一个居中的 NSButton。
File's Owner类设置为MyControl,顶层视图保持为NSViewMain.storyboard有一个自定义视图,分类为MyControl,居中设置了高度和宽度。
当我查看 Main.storyboard 时,它有一个自定义视图的框架,但它是空白的。
当我运行应用程序时,显示的窗口是空白的。
【问题讨论】:
-
显示你正在使用的代码;试图描述它是没有帮助的。
-
我现在所拥有的是一团混乱。我正在寻找的是我可以开始使用的其他人的代码。如果您真的认为发布我的代码会有所帮助,那么我将尝试简化并发布它,但我正在盲目地工作,我所做的一切都没有正常工作。
-
你的描述和代码看起来就像一个按钮在一个视图里面一个视图里面一个视图里面 -> 无限递归。
initWithCoder调用loadNibNamed,后者调用initWithCoder。你想完成什么? -
我正在尝试创建一个自定义的可重用控件。我想要结束的是一个图像和文本字段,并用一些代码捆绑在一起。我希望能够在 Interface Builder 中使用它。
标签: macos swift3 xcode8 macos-sierra appkit