首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化NSTextView的子类而不提供NSTextContainer

初始化NSTextView的子类而不提供NSTextContainer
EN

Stack Overflow用户
提问于 2016-01-05 16:46:20
回答 1查看 1.1K关注 0票数 3

我有一个NSTextView子类,在这个子类的初始化器中,我想调用:

代码语言:javascript
复制
super.init(frame: NSMakeRect(...))

在以编程方式初始化NSTextView时,我总是这样做的。我只是写:

代码语言:javascript
复制
let textView = NSTextView(frame: NSMakeRect(0,0,10,10))

但是,当我在子类(super.init(frame: (...)))中这样做时,编译器会抛出一个错误。它不允许我使用init(frame:),因为init(frame:)NSTextView的一个方便的初始化器,我必须调用“超类的指定初始化器”。

在检查了文档之后,我发现NSTextView的指定初始化程序是init(frame: textContainer:),但我不想处理NSTextContainers。为什么我必须从对象的子类中调用指定的初始化器,但是如果对象没有被子类化,我可以调用一个方便的初始化器。每当我通常初始化一个NSTextView时,我就不必提供一个NSTextContainer,但是当我将一个NSTextView初始化为一个子类的超类时,我就会提供它。为什么会这样呢?

另外,是否有任何方法可以使用某种“默认”文本容器初始化NSTextView?不管指定的初始化器是什么,我在这里要做的就是创建一个NSTextView,而不必担心NSTextContainers

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-09 16:21:51

我为这个找到了一份工作。这不漂亮,但它能完成任务。基本上,我只是在使用init(frame:)在子类初始化器中创建一个init(frame:)实例,然后将生成的textContainer应用于super

代码语言:javascript
复制
class Header: NSTextView {

    // methods and properties...

    init(frame theFrame: NSRect) {
        // using desired convenience initializer
        let test = NSTextView(frame: theFrame) 

        // using designated initializer, as required by the compiler
        super.init(frame: test.frame, textContainer: test.textContainer) 
    }

}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34616892

复制
相关文章

相似问题

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