Swift:将一个xib添加到UIView中

我想添加一个自定义的UIView。 我的自定义视图的类定义是:

class UserCoinView: UIView { @IBOutlet weak var userName: UILabel! @IBOutlet weak var coinView: UIView! @IBOutlet weak var coinAmount: UILabel! @IBOutlet weak var coinIcon: UILabel! override func drawRect(rect: CGRect) { let smartCoins = SmartShopperUtil.getSmartShopper().smartCoins if smartCoins != nil && smartCoins >= 0 { coinAmount.text = String(smartCoins!) coinView.backgroundColor = SmartShopperUtil.getSmartCoinBackgroundColor(SmartShopperUtil.getSmartShopper().smartCoins!) } userName.text = SmartShopperUtil.getSmartShopperNameWithFullName(SmartShopperUtil.getSmartShopper().name) coinIcon.text = AEVIcons.AEV_SMART_COIN } } 

我已经在ViewController中添加了一个视图我想添加这个视图,我已经把这个视图的自定义类设置为UserCoinView。 之后,我build立了一个ViewController的连接,在这个ViewController中我不知道该怎么做才能显示我的自定义UIView。

在此先感谢您的帮助。

有几种方法可以做到这一点。

以编程方式添加为子视图。

如果你使用autolayout,那么更好的地方是viewDidLayoutSubviews方法。

 var myCustomView: UserCoinView? // declare variable inside your controller override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if myCustomView == nil { // make it only once myCustomView = NSBundle.mainBundle().loadNibNamed("UserCoinView", owner: self, options: nil).first as? UserCoinView myCustomView.frame = ... self.view.addSubview(myCustomView) // you can omit 'self' here // if your app support both Portrait and Landscape orientations // you should add constraints here } } 

在InterfaceBuilder中添加为子视图。

您只需要在故事板中为您的控制器放置一个空视图,并在Identity Inspector中为您的类指定此视图。 之后,如果您需要的话,您可以将网点拖放到您的控制器类中。

在这里输入图像说明

至于我,我更喜欢第二种方法,因为你不需要以编程方式硬编码框架/创build约束,只需添加自动布局。

将它作为子视图添加到UIViewController或UITableViewController的内容视图(或视图控制器的视图层次结构中的某个其他视图)。

在最新的swift – >例如:

  let headerView = Bundle.main.loadNibNamed("SectionHeaderView", owner: self, options: nil)?.first as? SectionHeaderView self.view.addSubview(headerView!) headerView?.frame = CGRect(x:0, y: 0, width: view.frame.width, height: 50.0) 

我自己很新,但这应该工作。

添加:

 viewControllerName.addSubview(userCoinView) 

删除:

 userCoinView.removeFromSuperview() 

你可以试试这个

 override init(frame: CGRect) { super.init(frame: frame) loadViewFromNib () } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) loadViewFromNib () } func loadViewFromNib() { let view = UINib(nibName: "CreditCardExperyView", bundle: NSBundle(forClass: self.dynamicType)).instantiateWithOwner(self, options: nil)[0] as! UIView view.frame = bounds view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] self.addSubview(view); } // Call subview let creditCardView : CreditCardExperyView = CreditCardExperyView(frame: CGRect(x: 0, y: UIScreen.mainScreen().bounds.size.height - 280, width: UIScreen.mainScreen().bounds.size.width, height: 280)) selfView.addSubview(creditCardView)