lusher00
lusher00

Reputation: 678

Subclassing UIView

I see this topic is discussed elsewhere but I don't see an answer to my questions.

I subclassed UIView to create a custom view. Currently I'm using interface builder to create a UIView and then setting the custom class option to my subclass.

First question. When I do that, how to I reference that instance from my code? I have a public function I would like to call that updates my view but I don't know how to call it from my view controller

Second question. I created an instance of the class from within my view controller just playing around and I noticed the public function I created isn't available with that instance. Can I create public functions when I inherit from UIView?

Upvotes: 0

Views: 368

Answers (3)

Yan
Yan

Reputation: 33

You can try to update your view from IB with the mothod below.

Objective-C:

-(void)awakeFromNib {
    [super awakeFromNib];

    //do something
}

Swift

override func awakeFromNib() {
    super.awakeFromNib()
}

Second question

Do you mean the custom view don't answer the function you create within the view controller?

Upvotes: 0

aircraft
aircraft

Reputation: 26924

It is easy to do:

1)subclass UIView to create CustomView, add your public function,in your project:

import UIKit

class CunstomView: UIView {

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
    // Drawing code
}
*/

public func printHello() {


    print("hello")
}
}

2)In your storyboard, drag a UIView into your vc, and set the class to CunstomView, you can see that in my red frame:

drag <code>UIView</code>

3)click the Show the Assistant Editor, and ctrl-drag the view to the vc, set the name custom:

enter image description here

4)then in your vc's viewDidload function, you call the public function:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var custom: CunstomView!

    override func viewDidLoad() {
        super.viewDidLoad()

        custom.printHello()
    }


}

5)the result:

the result

Upvotes: 2

GeneCode
GeneCode

Reputation: 7588

First question. When I do that, how to I reference that instance from my code? I have a public function I would like to call that updates my view but I don't know how to call it from my view controller

A: A view cannot exist by itself in app. You need viewcontroller to handle the custom view. Then in that VC, you can refer the view as IBOutlet.

Second question. I created an instance of the class from within my view controller just playing around and I noticed the public function I created isn't available with that instance. Can I create public functions when I inherit from UIView?

A: You can create public function of custom view, just declare them in the header file. Then import the header in your VC. Then u can access it.

Upvotes: 0

Related Questions