自定义UIView没有故事板

时间:2017-12-05 12:58:07

标签: ios swift uiview

现在我正在练习构建IOS应用而不使用storyboard,但我有一个问题想要解决,我创建了一个名为BannerView的自定义UIView并添加了一个背景(UIView)和一个标题(UILabel),以及在BannerView中调用此MainVC,但运行此应用时,它会在函数setupSubviews()崩溃,我不知道为什么。

import UIKit
import SnapKit

class BannerView: UIView {

    var background: UIView!
    var title: UILabel!

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

    convenience init() {
        self.init(frame: CGRect.zero)
    }

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

    func setupSubviews() {
        background.backgroundColor = .gray
        title.text = "INHEART"

        self.addSubview(background)
        self.addSubview(title)
    }

    override func layoutSubviews() {
        background.snp.makeConstraints { make in
            make.width.equalTo(ScreenWidth)
            make.height.equalTo(BannerHeight)
            make.left.top.right.equalTo(0)
        }

        title.snp.makeConstraints { make in
            make.width.equalTo(100)
            make.center.equalTo(background.snp.center)
        }
    }

}




class MainVC: UIViewController {

    var bannerView:BannerView!

    override func viewDidLoad() {
        super.viewDidLoad()
        bannerView = BannerView(frame: CGRect.zero)
        view.addSubview(bannerView)
    }

}

3 个答案:

答案 0 :(得分:1)

您的属性似乎未初始化

var background: UIView!
var title: UILabel!

您应该在init方法中初始化这些

self.background = UIView()
self.title = UILabel()

如果对类属性使用强制解包,则必须在init方法中初始化。 XCode应该向你抱怨这个,你的错误信息应该显示类似的错误

答案 1 :(得分:1)

您没有初始化背景视图,请初始化它们

self.background = UIView()
self.title = UILabel()

如果您想使用xib创建自定义视图,请按照Custum View

进行操作

答案 2 :(得分:0)

你必须首先初始化self.background = UIView()和self.title = UILabel()。

您可以在设置/分配值之前在setupSubviews()函数中初始化它们。