Simple dependency injection for generating views from storyboard.
StoryboardBuilder
is framework to help simply and easily generating that View and ViewController are defineded in Storyboard and Xib. You can generate instance and parse type of one by using StoryboardBuilderProtocol
and XibBuilderProtocol
description.
Add following.
github "hiro-nagami/StoryboardBuilder"
- Create storyboard file in your project.
- Import StoryboardBuilder_iOS.
- Your custom view controller extends
StoryboardBuilderProtocol
. storyboardName
andstoryboardID
are implemented in that view controller.
import UIKit
import Foundation
import StoryboardBuilder_iOS
class CustomViewController: UIViewController, StoryboardBuilderProtocol {
static var storyboardName: String = "Main"
static var storyboardID: String = "CustomViewController"
...
}
You can use such as following.
/* You can generate CustomViewController just like following.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let customeVC = storyboard.instantiateViewController(withIdentifier: "CustomViewController") as! CustomViewController
**/
let customViewController = CustomViewController.getModule()
- Create xib file in your project.
- Import StoryboardBuilder_iOS.
- Your custom view controller extends
XibBuilderProtocol
. xibName
is implemented in that view controller.
import UIKit
import Foundation
import StoryboardBuilder_iOS
class CustomView: UIView, XibBuilderProtocol {
static var xibName: String = "CustomView"
...
}
You can use such as following.
/* You can generate CustomView just like following.
let identifier = "CustomView"
let customViewNib = UINib(nibName: identifier, bundle: nil)
let customView = customViewNib.instantiate(withOwner: self, options: nil).first as! CustomView
**/
let customView: CustomView = CustomView.getModule()
You can register and use CustomTableViewCell.
class CustomViewCell: UITableViewCell, XibBuilderProtocol {
static var xibName: String = "CustomView"
...
}
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.sb.register(cellClass: CustomViewCell.self)
self.tableView.sb.register(cellClasses: [
CustomViewACell.self,
CustomViewBCell.self,
CustomViewCCell.self,
])
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.sb.dequeueReusableCell(cellClass: CustomViewBCell.self)
...
return cell
}
}
StoryboardBuilder is released under the MIT license. See LICENSE for details.