簡體   English   中英

沒有Storyboard的自定義UIView

[英]Custom UIView without Storyboard

現在,我在不使用Storyboard的情況下練習構建IOS應用程序,但是我有一個要解決的問題,我創建了一個名為BannerView的自定義UIView,並添加了一個background(UIView)和一個title(UILabel),並在BannerView中將其MainVCMainVC ,但是運行此應用程序,它將在函數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)
    }

}

您的媒體資源似乎沒有被初始化

var background: UIView!
var title: UILabel!

您應該在init方法中初始化它們

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

如果對類屬性使用強制展開,則必須在init方法中進行初始化。 XCode應該就此向您抱怨,並且您的錯誤消息應顯示類似的錯誤

您尚未初始化背景視圖,請對其進行初始化

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

如果您要使用xib創建自定義視圖,請遵循它們Custum View

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

您可以在將值設置/分配給它們之前,在setupSubviews()函數中初始化它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM