2015-07-11 4 views
0

У меня есть XIB с пользовательским классом ProfileHeaderView. У меня также есть ProfileViewController и ПрофильTableViewCell, оба с IBOutlet profileHeader.Загрузка представления из XIB в ViewController и VIewCell

Что я хочу, это загрузить нить в profileHeader. До сих пор я делаю это, загружая NIB, а затем добавляя его как подпункт profileHeader, который, я думаю, не самый лучший вариант, и мне нужно установить фрейм вручную.

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

Каков наилучший способ его достижения?

ответ

3

Во-первых, создать пользовательский класс зрения

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

Смежные вопросы