【问题标题】:Having a row of equally sized custom NSViews拥有一排大小相同的自定义 NSView
【发布时间】:2015-03-14 09:43:17
【问题描述】:

我正在开发一个自定义的 NSView,我想要一个简单的应用程序来测试它在初始化和解除分配时的行为。为此,我想创建一个带有“添加和删除”按钮的窗口,该按钮将添加我的自定义视图,彼此相邻,大小相同。事实证明这比我更难。我以前使用 Qt 和 Gtk+ 的经验是微不足道的(因为这就是你在那里构建 UI 的方式)。

我尝试创建一个 NSBox 并将它们添加到其中,但这意味着我必须使用自动布局并以编程方式创建像“[view1]-[view2]-[view3]”这样的字符串,这听起来很痛苦,即便如此我不确定这是否足够。

我也尝试使用 NSCollectienView,但我不知道如何向其中添加任意 NSView。

【问题讨论】:

    标签: objective-c macos cocoa swift


    【解决方案1】:

    看看NSStackView。它是 Interface Builder 对象库中的一个相对较新的类(右二)。

    您可以垂直或水平堆叠视图,Cocoa 会为您处理所有自动布局。在下面的 sn-p 中,我将 30 个文本字段堆叠在一起:

    import Cocoa
    
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {
    
        @IBOutlet weak var window: NSWindow!
        @IBOutlet weak var stackView: NSStackView!
    
        func applicationDidFinishLaunching(aNotification: NSNotification) {
            for each in 0..<30 {
                var f = NSTextField()
                f.translatesAutoresizingMaskIntoConstraints = false
                stackView.addView(f, inGravity:.Top)
            }
        }
    }
    

    如果您想要比上述更复杂的东西,Apple 提供了一个名为 InfoBarStackView 的演示项目来帮助您启动和运行。无论它是否适合您的特定要求,对于您所描述的那种事情,这种方法绝对比NSBoxNSCollectionView 更好。

    【讨论】:

    • 它可以有三个以上的孩子吗?当我添加与第一个具有相同重力的第二个时,它会引发错误。
    • 据我所知,它可以有尽可能多的孩子(请参阅更新的答案)您如何添加它,错误是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2015-07-20
    • 1970-01-01
    相关资源
    最近更新 更多