简体   繁体   中英

iOS - Cannot get an @IBDesignable .xib file to show up on storyboard or simulator

I have set the file owner to be UserBannerView. The UIView in the storyboard that uses this .xib file is also set to be UserBannerView. I am not getting any errors, yet it won't show up in either the simulator or the storyboard.

import UIKit

@IBDesignable class UserBannerView: UIView {

var view: UIView!

@IBOutlet weak var userCreditsLabel: UILabel!

@IBOutlet weak var userRenewDateLabel: UILabel!
@IBOutlet weak var userImage: circlePP!
@IBOutlet weak var userMembershipBtn: UIButton!
@IBOutlet weak var userNameLabel: UILabel!

var nibName:String = "UserBannerView"

public override init(frame:CGRect){
    super.init(frame: frame)
    print("UserBannerView init from frame")
    setup()
}

public required init?(coder aDecoder:NSCoder){
    super.init(coder: aDecoder)
    print("UserBannerView init from decode")
    setup()
}

override func awakeFromNib() {
    print("UserBannerView awakeFromNib")

   // setup()
}

func setup() {
        print("UserBannerView:setup")
        let bundle = Bundle(for: type(of: self))
        let nib = UINib(nibName: "UserBannerView", bundle: bundle)
        self.view = nib.instantiate(withOwner: self, options: nil).first as! UIView
        self.view.frame = bounds
        self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.addSubview(self.view)
    }
}

Try implementing your awakeFromNib method and add prepareForInterfaceBuilder method

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

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    setup()
}

Also make sure that your class is setted as fileOwner in your xib file

Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM