0

我要CustomeLayoutManager适应UITextView。所以我做了一个子类(CustomTextViewUITextView

final class CustomTextView: UITextView {

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        let storage = NSTextStorage()
        let layout = CustomLayoutManager()
        storage.addLayoutManager(layout)
        let container = NSTextContainer()
        container.widthTracksTextView = true
        layout.addTextContainer(container)
        super.init(frame: frame, textContainer: container)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

CustomTextView由代码生成的工作正常。但是,我不知道CustomLayoutManager在创建实例时如何适应stroyboard

谢谢。

4

2 回答 2

0

您可以通过单击右侧面板中的 Identity Inspector 并在“类”字段中输入自定义类的名称来在情节提要中设置自定义类。

此外,您需要在两个 init 方法中实现您的 init 代码。

init(frame:) is called whenever you create a view(or subclass) object using UIView(frame:) method.

init(coder:) is called whenever your view(or subclass) is created from the storyboard.
于 2018-03-28T06:19:32.040 回答
0
  1. 在您的故事板中选择您的UITextView.
  2. 选择身份检查器(右窗格)并将类名命名为 CustomTextView.

现在,每当您的故事板创建它的对象时,textView它的类型都是CustomTextView.

编辑

所以这个问题是可以重现的。init当您从情节提要中实例化时不会调用它,而是init(coder:)调用它。看来您必须以编程方式进行。

于 2018-03-28T06:13:07.150 回答