从XIB加载视图到ViewController和VIewCell



我有一个XIB自定义类ProfileHeaderView。我也有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)

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

首先,创建自定义视图类

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


After, you've done。您可以通过编程方式创建自定义视图。

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

或者使用storyboard,通过拖动UIView到ViewController并设置UIView的自定义类为CustomView

最新更新