user16091636
user16091636

Reputation:

What to use as NSCoder to initialize a View?

Hey guys I created a new custom View Class and now I want to build a instance of it, I initialized it with the following code:

required init?(coder aCoder: NSCoder) {
        super.init(coder: aCoder)
           tapRecognizer = UITapGestureRecognizer(
                           target: self, action: #selector(handleBarTap))
           addGestureRecognizer(tapRecognizer)
       }

       deinit {
           removeGestureRecognizer(tapRecognizer)
       }

And this is the instance, but what can I use as coder?

lazy var chartView = TutorialChartView(coder: )

Thanks in advance!

Upvotes: 0

Views: 849

Answers (2)

Mr.SwiftOak
Mr.SwiftOak

Reputation: 1834

You should cannot use coder as initializer for creating class, use frame instead, here is your code written in frame-style initializing.

    override init(frame: CGRect) {
    super.init(frame: frame)
    tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleBarTap))
    addGestureRecognizer(tapRecognizer)
}

    required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Here is how you use it:

 lazy var chartView = TutorialChartView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)

Upvotes: 0

matt
matt

Reputation: 535140

When you say View, do you mean UIView? The problem is that that's the wrong initializer. init(coder:) is not something you call; it's a process initiated by the storyboard when there is one of these things in the storyboard and you load that view controller.

The code UIView designated initializer is init(frame:). Implement that and call it, and you're all set.

(You may also have to provide an implementation of init(coder:) but it should just throw a fatalError, because you do not expect to be called this way.)

Upvotes: 4

Related Questions