问题描述:

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?

网友答案:

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:

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

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:

网友答案:

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.

网友答案:

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?

相关阅读:
Top