将视图从 XIB 加载到 ViewController 和 VIewCell

Posted

技术标签:

【中文标题】将视图从 XIB 加载到 ViewController 和 VIewCell【英文标题】:Loading view from XIB into ViewController and VIewCell 【发布时间】:2015-07-11 15:21:40 【问题描述】:

我有一个带有自定义类 ProfileHeaderView 的 XIB。 我也有 ProfileViewControllerProfileTableViewCell,它们都带有 IBOutlet profileHeader

我想要的是将 nib 加载到 profileHeader 中。到目前为止,我通过加载 NIB 然后将其添加为 profileHeader 的子视图来做到这一点,我想这不是最好的解决方案,我必须手动设置框架。

let view = NSBundle.mainBundle().loadNibNamed("ProfileHeaderView", owner: self, options: nil).last as! ProfileHeaderView
view.setFrame(...)
self.profileHeaderView.addSubview(self.view)

实现它的最佳方法是什么?

【问题讨论】:

【参考方案1】:

首先,创建自定义视图类

class CustomView: UIView 

    // MARK: Custom View Initilization
    var view: UIView!

    func xibSetup() 
        view = loadViewFromNib()
        view.frame = bounds
        view.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight
        addSubview(view)
        //// additional setup here
    
    func loadViewFromNib() -> UIView 
        let bundle = NSBundle(forClass: self.dynamicType)
        // set nibName to be xib file's name
        let nib = UINib(nibName: "CustomView", bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        return view
    
    override init(frame: CGRect) 
        super.init(frame: frame)
        xibSetup()
    
    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        xibSetup()
    


其次,在CustomView.xib中设置File's owner自定义类为CustomView


之后,你就完成了。您可以通过编程方式创建自定义视图。

let customView = CustomView(frame: frame)
self.view.addSubview(customView)

或者使用故事板,将 UIView 拖到 ViewController 并将 UIView 的自定义类设置为CustomView

【讨论】:

以上是关于将视图从 XIB 加载到 ViewController 和 VIewCell的主要内容,如果未能解决你的问题,请参考以下文章

添加和布局从 xib 加载的子视图到自定义单元格

从框架加载 .xib 文件

将 UITabBarController 从单独的 XIB 加载到 iPhone 上的 Window 应用程序中

将附加视图插入从 Xib 加载的 UICollectionView

如何将视图 XIB 作为子视图加载到视图控制器 XIB 中

以编程方式将一堆自定义视图从 XIB 添加到 UIStackView