Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Designated Initializer of UITextView

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.

like image 892
Brian Tracy Avatar asked Jun 06 '14 05:06

Brian Tracy


2 Answers

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.

like image 110
Kris Gellci Avatar answered Sep 20 '22 02:09

Kris Gellci


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
    }
}
like image 23
Fattie Avatar answered Sep 19 '22 02:09

Fattie