创建NSStackView的子类

时间:2017-10-23 16:55:10

标签: swift macos cocoa initialization

我尝试创建一个子类os NSStackView,例如为它赋予一种特殊的颜色。

要实例化它,我必须调用指定为init的超类,如果我理解的话。

如何检测哪些是NSStackView指定的初始化程序。查看https://developer.apple.com/documentation/appkit/nsstackview我发现的唯一初始化程序是:

init(views: [NSView])

但下面的代码不能编译“必须调用超类'NSStackView'的指定初始值设定项”

class CStackView: NSStackView
{ init(views: [NSView], withColor color: NSColor)
  { super.init(views: views)
    // do something wich the color
  }

  required init?(coder decoder: NSCoder)
  { fatalError("init(coder:) has not been implemented")
  } 
}

init(编码器:)似乎是一个指定的初始化程序,但我想用它的子视图初始化CStackView,没有编码器。

2 个答案:

答案 0 :(得分:2)

init(views:)是一个便利初始化程序。

NSStackView没有声明任何指定的初始值设定项,因此它会从超类NSView继承它们,该超类具有init(frame:)init(coder:)

您可以使用初始化程序调用{​​{1}}或将初始值设定项声明为便捷初始值设定项,然后可以调用super.init(frame:)

答案 1 :(得分:0)

在@Dan的帮助下,就是这样。

class C3StackView: NSStackView
{ convenience init(views: [NSView], withColor color: NSColor)
  { self.init(views: views)  
    // do something wich the color
  }

  required convenience init?(coder decoder: NSCoder)
  { fatalError("init(coder:) has not been implemented")
  } 
}