Skip to content

Repository files navigation

Swift Package Manager compatibleCarthage compatible

NibView

@IBDesignableclassMyView:NibView{} // That's it! ✨

Preview

Tiny Swift framework to reference nibs from anywhere - code, other nibs or storyboards ✨

Capabilities
True rendering inside interface builder with @IBDesignable and @IBInspectable
📏Calculates correct intrinsic content size
♻️Referencing from other nibs and storyboards - keeping them small
⌨️Loading from code with a simple .fromNib()
⚙️Integrates as little or as much

Play around with Example project 🕹️👈

Usage

Subclass NibView

Just subclass NibView and optionally add @IBDesignable attribute. That's it! ✨

@IBDesignableclassMyView:NibView{}

Setup

⚠️ Usage If subclassing is not an option.

Implement NibLoadable

Implementing NibLoadable protocol and overriding a couple of functions will unleash the full power of referencing 💪:neckbeard:

⌨️ - Code

To reference nibs only from code implement NibLoadable protocol:

classMyView:SomeBaseView,NibLoadable{
// 'nibName' defaults to class name. "MyView" in this case.
classvarnibName:String{return"MyCustomView"}}letmyView=MyView.fromNib()

💻 - IB

To reference nibs from interface builder (other nibs or storyboards) in addition to implementing NibLoadable override awakeAfter(using:) with a call to nibLoader - a helper struct from 'NibLoadable' protocol:

classMyView:SomeBaseView,NibLoadable{overridefunc awakeAfter(using aDecoder:NSCoder)->Any?{return nibLoader.awakeAfter(using: aDecoder, super.awakeAfter(using: aDecoder))}}

⚡️📱✨ - @IBDesignable

To get real rendering and intrinsic content size from the nib - @IBDesignable attribute and some overrides are needed:

@IBDesignableclassMyView:SomeBaseView,NibLoadable{openoverridefunc awakeAfter(using aDecoder:NSCoder)->Any?{return nibLoader.awakeAfter(using: aDecoder, super.awakeAfter(using: aDecoder))}#if TARGET_INTERFACE_BUILDERoverrideinit(frame:CGRect){
super.init(frame: frame)
nibLoader.initWithFrame()}requiredinit?(coder aDecoder:NSCoder){
super.init(coder: aDecoder)}overridefunc prepareForInterfaceBuilder(){
super.prepareForInterfaceBuilder()
nibLoader.prepareForInterfaceBuilder()}overridefunc setValue(_ value:Any?, forKeyPath keyPath:String){
super.setValue(value, forKeyPath: keyPath)
nibLoader.setValue(value, forKeyPath: keyPath)}#endif}

Installation

Drag NibView.swift file into your Xcode project and add the following line to your Cartfile:

github "Trafi/NibView"
dependencies: [
.package(url: "https://github.com/trafi/NibView.git", .upToNextMajor(from: "2.0.0"))
]

Manual

Drag the Sources folder and NibView.swift file into your Xcode project.

About

Tiny Swift framework to reference nibs from anywhere - code, other nibs or storyboards ✨

Topics

Resources

Stars

62 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages