使用super.init创建自定义视图与xib的目的是什么?

时间:2018-02-11 20:59:27

标签: ios swift uiview uiviewcontroller

我想了解为什么我们一直使用super.init。

例如,

class HeaderStyle1: UIView {


var subview: UIView! //NİB


override init(frame: CGRect) {
    super.init(frame: frame)

    commonInit()
}

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

    commonInit()
}

func commonInit(){
    subview = Bundle.main.loadNibNamed("HeaderStyle1", owner: self, options: nil)?.first as! UIView
    subview.frame = bounds
    subview.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    addSubview(subview)

}

第一:当我实例化时

header = HeaderStyle1(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 80))

super.init(frame:frame)实例化UIView。为什么我们需要这个?

class ViewController: UIViewController {

   var header: HeaderStyle1!

    override func viewDidLoad() {
        super.viewDidLoad()

        createView()     }


    func createView() {

        //Create Header
        header = HeaderStyle1(frame: CGRect(x: 0, y: 0, width: self.view.fr
        self.view.addSubview(header)

}

第二:我将头部添加到UIViewController视图作为子视图。这里header是HeaderStyle1的一个实例。所以我实际上在UIViewController视图中添加了一个类。 UIViewController视图如何将视图显示为视图?是因为super.init还是什么? 谢谢

self.view.addSubview(header)

1 个答案:

答案 0 :(得分:1)

首先,因为每个类都是另一个类的子类您调用super.init以确保如果您调用超级的实例变量/方法 class,你可以在成功启动超类的时候这样做

enter image description here

假设我已经在NSArray中进行了分类,并且在应用程序的某些方面我想要调用

  NSArray*er = [myArr mutableCopy];
如果[super init];在子类化NSArray时失败,则复制过程将失败 因为mutableCopy是NSObject中的一个方法,我忽略了它的超级初始化

第二次,您实际上将UIView(HeaderStyle1)的实例添加到当前视图控制器的视图(也是UIView的实例)而不是类的类,这是一个层次结构由 Apple 制作,因此开发人员可以为他们的应用程序添加不同的视图以满足某些布局需求,并为所有预先设计的UIKit组件(UILabel,UITextfeild .....)模块化他们的设计IOS框架显示在小型移动设备中有意义的通用组件