TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Jul 2017 |
SwiftSwift Version | 3.0 |
SPMSupports SPM | ✗ |
Maintained by James Kauten.
This pod aims to simplify the process of building custom IBDesignables by reducing boilerplate and hiding the ugly interface builder details from what should be concise, and reusable subclasses of UIView.
To run the example project, clone the repo, and run pod install
from the Example directory first.
XibView is available through CocoaPods. To install it, add the following line to your Podfile:
pod "XibView"
The basic workflow for creating a custom IBDesignable looks like this.
import XibView
@IBDesignable class DummyView: XibView {
}
you’ll notice that instead of subclassing UIView
, we have subclassed XibView
instead. What this does is associate this class directly with a xib file of the same name. Don’t worry, XibView is a subclass of UIView.
@IBDesignable
flag. without it, the interface builder wont know that this is a view to build.Next create the .xib
file that you will design your custom view in, it’s important that the xib filename match the class that it will be owned by. This is how the XibView
machinery automatically finds its xib file based on the subclass name. In our example case the file would be called DummyView.xib
import XibView
/// an example of the XibView subclassing pattern
@IBDesignable class DummyView: XibView {
/// some segmented control
@IBOutlet weak var segmentedControl: UISegmentedControl!
/// some button
@IBOutlet weak var button: UIButton!
/// the background color of some button, can be changed
/// in the interface builder
@IBInspectable var buttonBackgroundColor: UIColor? {
get {
return button.backgroundColor
}
set {
button.backgroundColor = newValue
}
}
/// the top switch
@IBOutlet weak var switchTop: UISwitch!
/// the bottom switch
@IBOutlet weak var switchBottom: UISwitch!
}
The way CocoaPods handles resource bundles for views is a little funky compared to the way it’s done in a single target application. PodXibView
is here to fix that problem for all the UI building CocoaHeads out there. All the steps are the same, plus the extra final steps below.
this information can be found in your podspec and usually looks something like this.
s.resource_bundles = {
'SomeBundleName' => ['YourCocoaPodProjectDir/Classes/**/*.{storyboard,xib}']
}
PodXibViewSubclassing
protocol and implement the required function returning the name of the bundle you got in step 7. Naturally Apple has some pretty thorough documenation surrounding access control. If you’re new to frameworks, or wonder whether public or open is more applicable for your use case read this (should probably read it if you haven’t anyway):
import XibView
/// An example IBDesignable for use within a published cocoapod
@IBDesignable public class DummyView: PodXibView, PodXibViewSubclassing {
/// Return the name of the bundle that the xib for this class
/// is located in.
/// - returns: the name of the bundle that this view lives in
func getBundleName() -> String {
return "SomeBundleName"
}
}
kautenja, [email protected]
XibView is available under the MIT license. See the LICENSE file for more info.