2017-06-14 42 views
1

我已经设置了文件的所有者是UserBannerView。 故事板中使用此.xib文件的UIView也设置为UserBannerView。 我没有收到任何错误,但它不会显示在模拟器或故事板中。iOS的 - 无法得到@IBDesignable的.xib文件,以显示在故事板或模拟器

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) 
    } 
} 
+0

不知道是什么你正在努力实现。看起来你有一个'UserBannerView'的类,它从xib中取消存档相同的视图并添加到它自己。你的'setup'方法永远不会被调用,因为你的'init?(coder aDecoder:NSCoder)'永远不会被调用。真是一团糟! –

+0

我的故事板中有一个视图,类为UserBannerView,它调用init?(coder aDecoder:NScoder)。然后我有一个UserBannerView.xib文件 – Charles

+0

在.xib文件中为UserBannerView设置的类是什么? –

回答

1

尝试实现您awakeFromNib方法,并添加prepareForInterfaceBuilder方法

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

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

另外,还要确保你的类是在你的XIB文件设置好的作为fileOwner

希望这有助于

相关问题