swift 创建NSStackView的子类

cbjzeqam  于 2023-05-16  发布在  Swift
关注(0)|答案(2)|浏览(94)

我尝试创建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 with the color
  }

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

init(coder:)似乎是一个指定的初始化器,但我想初始化CStackView及其子视图,而不是编码器。

e5nqia27

e5nqia271#

init(views:)是一个方便的初始化器。
NSStackView没有声明任何指定的初始化器,因此它从它的超类NSView继承这些初始化器,该超类有init(frame:)init(coder:)
你可以让你的初始化器调用super.init(frame:),或者把你的初始化器声明为一个方便的初始化器,然后它可以调用self.init(views:)

1dkrff03

1dkrff032#

在@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")
  } 
}

相关问题