BaseVCKit
示例
要运行示例项目,请克隆仓库,并从 Example 目录首先运行 pod install
要求
- iOS 10.0+
- Xcode 9.0+
- Swift 4.2+
安装
CocoaPods
BaseVCKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
pod "BaseVCKit"
手动
如果您不希望使用上述任何依赖管理器,可以手动将 SnapKit 集成到您的项目中。
用法
易于导航,导航按钮可配置
import BaseVCKit
public class ViewController: UIViewController, EasyNavigatable {
private lazy var nextBtn: UIView = {
let v = UIButton()
v.setTitle("Next", for: .normal)
v.addTarget(self, action: #selector(next), for: .touchUpInside)
self.view.addSubview(v)
return v
}()
public override func viewDidLoad() {
super.viewDidLoad()
nextBtn.snp.makeConstraints { (make) in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(60)
}
}
public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
startKeyboardAnimationObserve()
}
public override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
stopKeyboardAnimationObserve()
}
// MARK: - Action
func next(sender: UIButton!) {
let nextVC = UIViewController()
push(nextVC, isHideBottomBar: true)
}
}
// NavButtonConfigurable
extension ViewController: NavButtonConfigurable {
public var backButtonIcon: UIImage? {
return UIImage(named: "back")
}
public var backButtonTitle: String? {
return ""
}
public var closeButtonIcon: UIImage? {
return UIImage(named: "close")
}
}
键盘可自动适应
import UIKit
import BaseVCKit
class UseKeyboardViewController: BaseViewController {
private lazy var txtField: UITextField = {
let v = UITextField()
v.backgroundColor = UIColor.lightGray
self.view.addSubview(v)
return v
}()
fileprivate lazy var doneBtn: UIButton = { [unowned self] in
let v = UIButton()
v.setTitle("Done", for: .normal)
v.backgroundColor = .lightGray
v.addTarget(self, action: #selector(self.done), for: .touchUpInside)
self.view.addSubview(v)
return v
}()
override func viewDidLoad() {
super.viewDidLoad()
title = "Modal"
layoutSubViews()
}
// MARK: - Layout
private func layoutSubViews() {
let marginH: CGFloat = 20
txtField.snp.makeConstraints { (make) in
make.top.equalTo(100)
make.left.equalTo(marginH)
make.right.equalTo(-marginH)
make.height.equalTo(40)
}
doneBtn.snp.makeConstraints { (make) in
make.left.equalTo(marginH)
make.right.equalTo(-marginH)
make.bottom.equalToSuperview().offset(-keyboardFollowOffset)
}
}
// MARK: - Actions
@objc private func done(sender:UIButton!) {
view.endEditing(true)
}
}
// KeyboardObserable
extension ModalViewController: KeyboardSanpable {
public var keyboardFollowView: UIView? {
return doneBtn
}
public var keyboardFollowOffset: CGFloat {
return 16
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
startKeyboardAnimationObserveWithViewWillAppear()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
stopKeyboardAnimationObserveWithViewWillDisAppear()
}
}
TabbarVCGenerator
import UIKit
import BaseVCKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
if let w = window {
w.backgroundColor = UIColor.white
w.rootViewController = CustomTabbar.tabVC
w.makeKeyAndVisible()
}
return true
}
}
// MARK: - Spec of TabbarItems
public enum CustomTabbar {
case home, setting
public static var tabVC: UITabBarController {
return TabbarVCGenerator.tabVC(menuSpecs: self.allTabMenuSpec)
}
static var allTabMenuSpec: [TabbarVCGenerator.TabMenuSpec] {
return [self.home, self.setting].map{ $0.toMenuSpec }
}
var toMenuSpec: TabbarVCGenerator.TabMenuSpec {
var systemItem: UITabBarSystemItem!
var vc: UIViewController!
switch self {
case .home:
vc = ViewController()
systemItem = .search
case .setting:
vc = ViewController2()
systemItem = .history
}
return TabbarVCGenerator.TabMenuSpec(viewController: vc, systemItem: systemItem)
}
}
依赖项
- SnapKit (3.2.0) - iOS 和 OS X 的 Swift 自动布局 DSL
作者
许可证
BaseVCKit可在MIT许可证下获得。有关更多信息,请参阅LICENSE文件。