将Xib加载到UIView中而不将其添加为子视图

时间:2015-04-11 15:50:00

标签: ios objective-c swift uiview xib

如何将笔尖加载到UIView而不必将其添加为subview?在objc中,您可以在init方法中使用self = [NSBundle MainBundle].loadNibNamed…,但swift说“Cannot assign to ‘self’ in a method”

enter image description here

在对象中你可以做到这一点。 Reusable Views 但似乎很快就不喜欢它。 我发现唯一的方法是将Xib加载到UIView中并将其添加为当前视图的子视图

@IBDesignable class CustomViewFromXib: UIView 
{
    var nibName: String = "CustomViewFromXib"
    override init(frame: CGRect) 
    {
        super.init(frame: frame)
        setup()
    }
    required init(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() 
    {
        let bundle = NSBundle(forClass: self.dynamicType)
        let nib = UINib(nibName: nibName, bundle: bundle)
        let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
        view.frame = bounds
        self.view.addSubview(view)
    }
}

1 个答案:

答案 0 :(得分:-1)

[[NSBundle mainBundle] loadNibNamed:@“myNib”owner:self options:nil];

是另一种方式,并设置它的所有者。

它有点滑,可能会打破KVO / KVC方面的事情