- Notifications
You must be signed in to change notification settings - Fork7
Tiny Swift framework to reference nibs from anywhere - code, other nibs or storyboards ✨
License
trafi/NibView
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
@IBDesignableclassMyView:NibView{} // That's it! ✨
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 withExample
project 🕹️👈
Just subclassNibView
and optionally add@IBDesignable
attribute. That's it! ✨
@IBDesignableclassMyView:NibView{}
⚠️ Usage If subclassing isnot an option.
ImplementingNibLoadable
protocol and overriding a couple of functions will unleash the full power of referencing 💪:neckbeard:
To reference nibs only from code implementNibLoadable
protocol:
classMyView:SomeBaseView,NibLoadable{ // 'nibName' defaults to class name. "MyView" in this case.classvarnibName:String{return"MyCustomView"}}letmyView=MyView.fromNib()
To reference nibs from interface builder (other nibs or storyboards) in addition to implementingNibLoadable
overrideawakeAfter(using:)
with a call tonibLoader
- a helper struct from 'NibLoadable' protocol:
classMyView:SomeBaseView,NibLoadable{overridefunc awakeAfter(using aDecoder:NSCoder)->Any?{return nibLoader.awakeAfter(using: aDecoder, super.awakeAfter(using: aDecoder))}}
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}
DragNibView.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"))]
Drag theSources
folder andNibView.swift
file into your Xcode project.
About
Tiny Swift framework to reference nibs from anywhere - code, other nibs or storyboards ✨
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors2
Uh oh!
There was an error while loading.Please reload this page.