TTBaseUIKit 2.1.0

TTBaseUIKit 2.1.0

TQT 维护。



  • Truong Quang Tuan

TTBaseUIKit

使用编程方式构建项目 UI。您可以在以下链接中了解更多详细信息:[TTBaseUIKit - 用于编程构建 UI 的框架](https://tqtuan1201.github.io/posts/ttbaseuikit-ui-framework/)

在您的 Podfile 中添加以下行:[点击查看版本](https://img.shields.io/cocoapods/v/TTBaseUIKit.svg?style=flat) [点击查看许可证](https://img.shields.io/cocoapods/l/TTBaseUIKit.svg?style=flat) [点击查看平台](https://img.shields.io/cocoapods/p/TTBaseUIKit.svg?style=flat) [Carthage 兼容](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)


安装

Swift 包管理器

  1. 文件 > Swift 包 > 添加包依赖
  2. 添加 https://github.com/tqtuan1201/TTBaseUIKit.git
  3. 将"1.5.0"的"升级到下一个主要版本"选择器选中

一旦您的 Swift 包设置完成,将 Alamofire 添加为依赖项就像将其添加到 Package.swiftdependencies 值一样简单。

dependencies: [
    .package(url: "https://github.com/tqtuan1201/TTBaseUIKit.git", .upToNextMajor(from: "1.5.0"))
]
or 
dependencies: [
    .package(url: "https://github.com/tqtuan1201/TTBaseUIKit.git", branch: "master"),
]

如果您在将包添加到 Xcode 项目时遇到任何问题或有任何疑问,我建议您阅读 Apple 的《将包依赖项添加到您的应用程序》指南文章。

CocoaPods

CocoaPods 是 Cocoa 项目的依赖项管理器。在您的 Podfile 中添加以下行

pod 'TTBaseUIKit'

Carthage

将以下行添加到您的 Cartfile

github "tqtuan1201/TTBaseUIKit"

手动

  1. 将 TTBaseUIKit 仓库放在您的项目目录的某个位置。
  2. 在 Xcode 中,将 TTBaseUIKit.xcodeproj 添加到您的项目中。
  3. 在您的应用程序目标中,将 TTBaseUIKit 框架
    1. 在“通用”选项卡上作为嵌入的二进制文件添加。
    2. 在“构建阶段”选项卡上作为目标依赖项添加。

使用示例

这里是几个鼓舞人心且实用的示例,展示了您的产品如何使用。可以使用代码块和截图来丰富这些示例。

基本配置设置

当您使用此框架时,您可以控制 颜色字体大小UI大小。这有助于您在应用 主题、在 不同平台 上构建应用程序时进行设置,并且它们很容易更改。在AppDelegate中的配置设置

let view:ViewConfig = ViewConfig()
view.viewBgNavColor = UIColor.blue
view.viewBgColor = UIColor.white
view.buttonBgDef = UIColor.blue
view.buttonBgWar = UIColor.red

let size:SizeConfig = SizeConfig()
size.H_SEG = 50.0
size.H_BUTTON = 44.0

let font:FontConfig = FontConfig()
font.HEADER_H = 16
font.TITLE_H = 14
font.SUB_TITLE_H = 12
font.SUB_SUB_TITLE_H = 10

TTBaseUIKitConfig.withDefaultConfig(withFontConfig: font, frameSize: size, view: view)?.start(withViewLog: true)

self.window = UIWindow(frame: UIScreen.main.bounds)
self.window!.rootViewController = UINavigationController.init(rootViewController: YourViewController())
self.window!.makeKeyAndVisible()
  • 使用ViewConfig,您可以自定义大部分颜色的配置,包括 按钮标签背景颜色 等。您可以在这里查看所有配置:ViewConfig
  • 使用SizeConfig,您可以自定义大部分大小配置,包括 按钮标签导航圆角半径图标文本框 等。您可以在这里查看所有配置:SizeConfig
  • 使用SizeConfig,您可以自定义大部分字体大小配置,包括 标题副标题头部 等。您可以在这里查看所有配置:FontConfig

通过以下方式应用配置:

TTBaseUIKitConfig.withDefaultConfig(withFontConfig: font, frameSize: size, view: view)?.start(withViewLog: true)

使用

TTBaseUIKit显著简化了使用代码编程构建UI的过程。让我们快速看看一些例子,这些例子使用Swift中的TTBaseUIKit

界面自定义

显示信息

let noti:TTBaseNotificationViewConfig = TTBaseNotificationViewConfig(with: window)
noti.setText(with: "WELCOME ^^", subTitle: "Just demo little element ui with write by  programmatically swift")
noti.type = .NOTIFICATION_VIEW
noti.touchType = .SWIPE
noti.notifiType = .SUCCESS
noti.onShow()

显示弹出窗口

let popupVC = TTPopupViewController(title: "SOMETHING LIKE THIS", subTitle: "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has b", isAllowTouchPanel: true)
yourVC.present(popupVC, animated: true)

在表格视图中显示空白

yourVC.tableView.setStaticBgNoData(title: "NO DATA", des: "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making ") {
  print("Touch handle!!!!")
            }

ViewCodable

这是一个用于轻松组织UI处理代码的协议。您可以将所有配置在这里查看:[ViewCodable](https://github.com/tqtuan1201/TTBaseUIKit/blob/master/TTBaseUIKit/TTBaseUIKit/CustomView/ViewCodable/ViewCodable.swift)

  • func setupViewCodable(with views : [UIView])

    此函数按正确顺序调用所有其他函数。您可以在UIViewController的viewDidLoad方法中或在一个视图初始化器中使用它,例如。

  • func setupStyles()

    应使用此函数用于应用自定义视图的样式。

  • func setupData()

    应使用此函数设置数据

  • func setupConstraints()

    应使用此函数添加到自定义视图的约束

  • func setupBaseDelegate()

    应使用此函数为视图设置代理

基本 UIViews

自定义视图

import TTBaseUIKit

class YourCustomView : TTBaseUIView {
    override func updateBaseUIView() {
        super.updateBaseUIView()
    }
}

extension YourCustomView :TTViewCodable {

    func setupStyles() {
    }

    func setupCustomView() {
    }

    func setupConstraints() {
    }

}

Base UIViewController

import  TTBaseUIKit

class BaseUIViewController: TTBaseUIViewController<DarkBaseUIView> {

    var lgNavType:BaseUINavigationView.TYPE { get { return .DEFAULT}}
    var backType:BaseUINavigationView.NAV_BACK = .BACK_POP

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        self.updateForNav()
    }

    public override init() {
        super.init()
        self.navBar = BaseUINavigationView(withType: self.lgNavType)
        self.setDelegate()
    }

    public convenience init(backType:BaseUINavigationView.NAV_BACK) {
        self.init()
        self.backType = backType
    }

    public convenience init(withTitleNav title:String, backType:BaseUINavigationView.NAV_BACK = .BACK_POP) {
        self.init()
        self.backType = backType
        self.setTitleNav(title)
    }

    public convenience init(withNav nav:BaseUINavigationView, backType:BaseUINavigationView.NAV_BACK = .BACK_POP) {
        self.init()
        self.backType = backType
        self.navBar = nav
        self.setDelegate()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

// MARK: For private base funcs
extension BaseUIViewController {

    fileprivate func setDelegate() {
        if let lgNav = self.navBar as? BaseUINavigationView { lgNav.delegate = self }
    }

    fileprivate func updateForNav() {
        if let lgNav = self.navBar as? BaseUINavigationView {
            lgNav.setTitle(title: "TTBASEUIVIEW_KIT")
        }
    }
}

// MARK: For public base funcs
//--NAV
extension BaseUIViewController {

    func setTitleNav(_ text:String) {
        self.navBar.setTitle(title: text)
    }

    func setShowNav() {
        self.statusBar.isHidden = false
        self.navBar.isHidden = false
    }

    func setHiddenNav() {
        self.statusBar.isHidden = true
        self.navBar.isHidden = true
    }

}

extension BaseUIViewController :BaseUINavigationViewDelegate {
    func navDidTouchUpBackButton(withNavView nav: BaseUINavigationView) {
        if self.backType == .BACK_POP {
            self.navigationController?.popViewController(animated: true)
        } else if self.backType == .BACK_TO_ROOT {
            self.navigationController?.popToRootViewController(animated: true)
        } else {
            self.dismiss(animated: true, completion: nil)
        }
    }
    func navDidTouchUpRightButton(withNavView nav: BaseUINavigationView) {

    }
}

Base UITableViewController

import TTBaseUIKit

class BaseUITableViewController: TTBaseUITableViewController {

    override var navType: TTBaseUIViewController<TTBaseUIView>.NAV_STYLE { get { return .STATUS_NAV}}

    var lgNavType:BaseUINavigationView.TYPE { get { return .DEFAULT}}
    var backType:BaseUINavigationView.NAV_BACK = .BACK_POP

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        DispatchQueue.main.async { [weak self] in guard let strongSelf = self else { return }
            guard let headerView = strongSelf.tableView.tableHeaderView else { return }
            headerView.layoutIfNeeded()
            let header = strongSelf.tableView.tableHeaderView
            strongSelf.tableView.tableHeaderView = header
        }
    }


    override func updateBaseUI() {
        super.updateBaseUI()
        self.navBar = BaseUINavigationView(withType: self.lgNavType)
        self.setDelegate()
    }

}


//For Base private funcs
extension BaseUITableViewController : BaseUINavigationViewDelegate{

    fileprivate func setDelegate() {
        if let lgNav = self.navBar as? BaseUINavigationView { lgNav.delegate = self }
    }

    func navDidTouchUpBackButton(withNavView nav: BaseUINavigationView) {
        self.navigationController?.popViewController(animated: true)
    }
}

自动布局

TTBaseUIKit 使自动布局更加容易。此框架提供一些函数来设置和更新约束。

  • setLeadingAnchor:设置/更新当前视图或父视图的值
  • setTrailingAnchor(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat, isApplySafeArea:Bool = false, priority:UILayoutPriority? = nil)
  • setTopAnchor(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat, priority:UILayoutPriority? = nil)
  • setBottomAnchor(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat,isMarginsGuide:Bool = false, priority:UILayoutPriority? = nil)
  • 设置中心X锚点(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat)
  • 设置中心Y锚点(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat)

有用的函数

TTBaseUIKit提供了对StringDateJsonDeviceLanguage越南农历 Validation网络速度测试的常用处理函数。

示例应用

有关更多示例和用法,请参阅示例项目 TTBaseUIKitExample

已安装的应用

在我的工作中,我已经在各种项目中更新和使用了这个框架。所有我的项目都使用UI programmatically而不是使用Storyboard。以下是这些应用的截图

  • 12Bay iOS应用

  • 12Bay MacOS应用

  • Aihealth iOS应用

您可以在以下链接中查看我的所有项目:链接

优点

  • 可重用代码
  • 加快项目开发速度
  • 易于使用

劣势

  • 必须创建应用以查看用户界面SwiftUI解决了我想到的那个问题。

有关更多示例和用法,请参阅示例项目[TTBaseUIKitExample]。

元数据

Truong Quang Tuan – @website/gmail[email protected]

在XYZ许可证下发布。有关更多信息,请参阅LICENSE文件。

https://github.com/tqtuan1201/TTBaseUIKit

关于我的项目

我们构建高质量的应用程序!如果您需要项目帮助,请联系我们。

许可证

TTBaseUIKit遵循MIT许可证。详细信息请参阅LICENSE文件