BaseVCKit 5.0.0

BaseVCKit 5.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
Released最后发布2019年10月
SPM支持 SPM

FrankBaseViewControllerKitTrunk 维护。



 
依赖关系
SnapKit>= 0
Kingfisher>= 0
 

BaseVCKit 5.0.0

  • 作者:
  • seongkyu-sim

BaseVCKit

CI Status Version License Platform

示例

要运行示例项目,请克隆仓库,并从 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

作者

seongkyu-sim,

许可证

BaseVCKit可在MIT许可证下获得。有关更多信息,请参阅LICENSE文件。