Designated Initializer of UITextView

2020-04-05 08:04发布

问题:

When I create a new subclass of UITextView in the Xcode 6 Beta, the following code is automatically provided.

import UIKit

class TerminalView: UITextView {

    init(frame: CGRect) {
        super.init(frame: frame)
        // Initialization code
    }
}

The previous code (completely provided by Xcode with nothing removed) gives the following error.

Must call a designated initializer of the superclass 'UITextView'

As far as I know, the designated for all subclasses of UIView is -initWithFrame: (or in Swift, init(frame:). If this is the case, why does the code provided by Xcode result in an error? I have added no new instance variables to the class, so nothing else has to be initialized yet.

回答1:

It seems as though the only initializer that works for now is:

super.init(frame: CGRect, textContainer: NSTextContainer?)

which can be called with

super.init(frame: CGRect.zero, textContainer: nil)

This is most likely a bug in the initial beta release and will be fixed in upcoming beta releases.



回答2:

For 2020:

class SpecialText: UITextView {

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        common()
    }

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

    private func common() {
        backgroundColor = .yellow
        font = .systemFont(ofSize: 26)
        textColor = .green
    }
}