【问题标题】:How to create background for NSView when using storyboards with OS X在 OS X 中使用情节提要时如何为 NSView 创建背景
【发布时间】:2015-02-06 16:21:51
【问题描述】:

我知道我如何能够以编程方式做到这一点。我知道在为 iOS 创建故事板时非常简单,并且就在属性检查器中。但是,在为 OS X 创建故事板时,我的任何视图控制器或 Xcode 6.1.1 中它下面的视图都看不到它

如何更改视图的背景而无需创建与之关联的视图控制器。我的应用程序有很多简单的视图,但是背景从一个视图更改为下一个视图。

【问题讨论】:

    标签: objective-c xcode macos swift nsview


    【解决方案1】:

    这是实现相同效果的另一种方法。

    在你的NSView下添加NSBox,调整NSBox的frame和NSView一样。

    将标题位置更改为无,框类型更改为自定义,边框类型更改为

    这是截图:

    然后将您的 NSView、NSButton、NSTextField 或其他任何内容添加为 NSBox 的子视图。

    这是结果:

    【讨论】:

      【解决方案2】:

      你不应该需要一个新的 viewController 来改变一个 NSView 的背景。如果你没有继承 NSView,那么你可以简单地调用:

      myView.wantsLayer = true
      myView.layer!.backgroundColor = CGColorGetConstantColor(kCGColorBlack)
      

      我不确定您是否可以在情节提要中严格执行此操作,但您可以使用用户定义的运行时属性在情节提要中设置 WantLayer = true。

      【讨论】:

      【解决方案3】:

      如果您将NSView 子类化并将子类分配给您的视图,则可以在情节提要中更改NSView 的背景颜色:

      使用这个子类实现:

      import Cocoa
      
      class ViewWithBackgroundColor : NSView {
          @IBInspectable var backgroundColor: NSColor? {
              get {
                  guard let layer = layer, backgroundColor = layer.backgroundColor else { return nil }
                  return NSColor(CGColor: backgroundColor)
              }
      
              set {
                  wantsLayer = true
                  layer?.backgroundColor = newValue?.CGColor
              }
          }
      
          override init(frame frameRect: NSRect) {
              super.init(frame: frameRect)
          }
      
          required init?(coder: NSCoder) {
              super.init(coder: coder)
          }
      }
      

      背景颜色不在设计时显示,而是在运行时显示。

      也许有人知道如何在设计时更新视图(最好不要覆盖 draw 方法)。

      【讨论】:

        猜你喜欢
        • 2015-04-10
        • 2012-10-25
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        相关资源
        最近更新 更多