Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
trafi/NibView
NibView
@IBDesignable class MyView: NibView {} // That's it! â¨
Tiny Swift framework to reference nibs from anywhere - code, other nibs or storyboards :sparkles:
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! â¨
@IBDesignable class MyView: NibView {}
â ī¸ 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:
class MyView: SomeBaseView, NibLoadable {
// 'nibName' defaults to class name. "MyView" in this case.
class var nibName: String { return "MyCustomView" }
}
let myView = 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:
class MyView: SomeBaseView, NibLoadable {
override func 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:
@IBDesignable
class MyView: SomeBaseView, NibLoadable {
open override func awakeAfter(using aDecoder: NSCoder) -> Any? {
return nibLoader.awakeAfter(using: aDecoder, super.awakeAfter(using: aDecoder))
}
#if TARGET_INTERFACE_BUILDER
override init(frame: CGRect) {
super.init(frame: frame)
nibLoader.initWithFrame()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
nibLoader.prepareForInterfaceBuilder()
}
override func setValue(_ value: Any?, forKeyPath keyPath: String) {
super.setValue(value, forKeyPath: keyPath)
nibLoader.setValue(value, forKeyPath: keyPath)
}
#endif
}
Installation
Carthage
Drag NibView.swift
file into your Xcode project and add the following line to your Cartfile:
github "Trafi/NibView"
Swift Package Manager
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.
Github
link |
Stars: 54 |
Last commit: 19 weeks ago |