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)