首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建NSStackView的子类

创建NSStackView的子类
EN

Stack Overflow用户
提问于 2017-10-24 00:55:10
回答 2查看 206关注 0票数 0

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

为了实例化它,如果我理解正确的话,我必须调用一个指定为init的超类。

我怎样才能检测到,哪些是指定的NSStackView初始化器。查看https://developer.apple.com/documentation/appkit/nsstackview,我找到的唯一初始化器是:

代码语言:javascript
复制
init(views: [NSView])

但是下面的代码不能使用“必须调用超类‘NSStackView’的指定初始化器”进行编译。

代码语言:javascript
复制
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")
  } 
}

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

EN

回答 2

Stack Overflow用户

发布于 2017-10-24 01:09:18

init(views:)是一个方便的初始化器。

NSStackView没有声明任何指定的初始化器,所以它从它的超类NSView继承了这些初始化器,这个超类具有init(frame:)init(coder:)

您可以让初始化器调用super.init(frame:),也可以将您的初始化器声明为方便的初始化器,然后它就可以调用self.init(views:)了。

票数 2
EN

Stack Overflow用户

发布于 2017-10-24 01:36:42

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

代码语言:javascript
复制
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")
  } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46894639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档