2016-11-12 64 views
0

我第一次使用nib文件。我的意思是xib和相應的swift類。Xcode - IBOutlets和Nib文件如何工作?

這裏是我的SWIFT類:

import UIKit 

@IBDesignable class LittleVideoView: UIView { 

    var view: UIView! 

    var nibName: String = "LittleVideoView" 

    // MARK: Views 
    @IBOutlet weak var titleLabel: UILabel! 
    @IBOutlet weak var clicksLabel: UILabel! 
    @IBOutlet weak var channelNameLabel: UILabel! 
    @IBOutlet weak var thumbnailImageView: UIImageView! 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     setup() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setup() 
    } 

    func setup() { 
     view = loadViewFromNib() 
     view.frame = bounds 
     view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
     addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 
     let bundle = NSBundle(forClass: self.dynamicType) 
     let nib = UINib(nibName: nibName, bundle: bundle) 
     let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 
     return view 
    } 
} 

從我創造了一些IBOutlets正如你所看到的編輯器視圖。一切正常。

有一些我不明白。我正在以編程方式在此類中加載筆尖,所以爲什麼我可以創建IBOutlets,而Xcode並不真正知道我會真正加載正確的筆尖文件?不久,我不明白IBOutlets如何在這種情況下工作。那麼,Xcode correclty如何將setup()方法中加載的UIView與IBOutlets鏈接起來呢?

+0

這不是想知道不合理的事情,但沒有必要要求它_again_;這裏已經解釋了很多次。 – matt

回答

2

筆尖文件具有「文件所有者」類型,編輯器用它來列出可用的出口和動作。但是,當nib在運行時加載時,該類型未被強制執行。在假設傳遞給instantiateWithOwner的「所有者」與在nib中定義的任何出口綁定兼容的情況下,使用-setValue:forKey:連接出口。

One xib File with Multiple "File's Owner"s

If you have an IBOutlet, but not a property, is it retained or not?

+0

謝謝,我忘了「instantiateWithOwner」:) – NathanVss