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 包管理器
- 文件 > Swift 包 > 添加包依赖
- 添加 https://github.com/tqtuan1201/TTBaseUIKit.git
- 将"1.5.0"的"升级到下一个主要版本"选择器选中
一旦您的 Swift 包设置完成,将 Alamofire 添加为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
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"
手动
- 将 TTBaseUIKit 仓库放在您的项目目录的某个位置。
- 在 Xcode 中,将
TTBaseUIKit.xcodeproj
添加到您的项目中。 - 在您的应用程序目标中,将 TTBaseUIKit 框架
- 在“通用”选项卡上作为嵌入的二进制文件添加。
- 在“构建阶段”选项卡上作为目标依赖项添加。
使用示例
这里是几个鼓舞人心且实用的示例,展示了您的产品如何使用。可以使用代码块和截图来丰富这些示例。
基本配置设置
当您使用此框架时,您可以控制 颜色
、字体大小
、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
提供了对String
、Date
、Json
、Device
、Language
、越南农历
、Validation
、网络速度测试
的常用处理函数。
示例应用
有关更多示例和用法,请参阅示例项目 TTBaseUIKitExample
已安装的应用
在我的工作中,我已经在各种项目中更新和使用了这个框架。所有我的项目都使用UI programmatically
而不是使用Storyboard
。以下是这些应用的截图
您可以在以下链接中查看我的所有项目:链接
优点
- 可重用代码
- 加快项目开发速度
- 易于使用
劣势
- 必须创建应用以查看用户界面,
SwiftUI
解决了我想到的那个问题。
有关更多示例和用法,请参阅示例项目[TTBaseUIKitExample]。
元数据
Truong Quang Tuan – @website/gmail – [email protected]
在XYZ许可证下发布。有关更多信息,请参阅LICENSE
文件。
https://github.com/tqtuan1201/TTBaseUIKit
关于我的项目
我们构建高质量的应用程序!如果您需要项目帮助,请联系我们。
许可证
TTBaseUIKit遵循MIT许可证。详细信息请参阅LICENSE文件。