TTBaseUIKit 是一个框架,它通过提供用 UIKit 编程式和 SwiftUI 编写的基础视图,帮助您以最快和最有效的方式构建 iOS 应用程序。TTBaseUIKit 当前版本支持 iOS 和 OS X 的所有版本,自每个平台上引入 Auto Layout 以来,均使用 Swift 语言和单个代码库。
在此更新中,我包含了一个名为 TTBaseUIKitExample 的基础项目,它提供了 BaseUIViewController、BaseUITableViewController、BaseCollectionViewController 等 UIKit 中的基础类,以及 SwiftUI 中的 BaseView、BaseButton、BaseText、BaseStack 等的全面示例。 理解这一点的最简单和最直接的方法是下载示例并运行它。 实践是最好的理解方式。
您可以在这里查看更多详细信息:TTBaseUIKit - TTBaseUIKitExample
一旦你设置好了 Swift 包,添加 Alamofire 作为依赖就像把它添加到你的 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/tqtuan1201/TTBaseUIKit.git", .upToNextMajor(from: "2.1.0"))
]
or
dependencies: [
.package(url: "https://github.com/tqtuan1201/TTBaseUIKit.git", branch: "master"),
]
如果您在向 Xcode 项目添加软件包时遇到任何问题或有疑问,我建议阅读 Apple 的添加 Package 依赖到您的 App 指南文章。
CocoaPods 是 Cocoa 项目的依赖管理器。 将以下行添加到您的 Podfile 中
pod 'TTBaseUIKit'
将以下行添加到您的 Cartfile 中
github "tqtuan1201/TTBaseUIKit"
TTBaseUIKit.xcodeproj
添加到您的项目中。当您使用此框架时,您可以控制 Color
(颜色)、FontSize
(字体大小)、UI size
(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
,您可以自定义 Button
(按钮)、Label
(标签)、Background colors
(背景颜色)等的大部分颜色。 您可以在此处查看所有配置:ViewConfigSizeConfig
,您可以自定义 Button
(按钮)、Label
(标签)、Navigation
(导航)、Conner radius
(圆角半径)、Icon
(图标)、Textfield
(文本字段)等的大部分尺寸。 您可以在此处查看所有配置:SizeConfigFontConfig
,您可以自定义 Title
(标题)、SubTitle
(副标题)、Header
(标题)等的大部分字体大小。 您可以在此处查看所有配置: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!!!!")
}
这是一个用于轻松组织 UI 处理代码的 protocol
(协议)。 您可以在此处查看所有配置:ViewCodable
func setupViewCodable(with views : [UIView])
此函数按正确的顺序调用所有其他函数。 例如,您可以在 UIViewController 的 viewDidLoad 方法或在视图初始化程序中使用它。
func setupStyles()
此函数应用于将样式应用于您的自定义视图。
func setupData()
此函数应用于设置数据
func setupConstraints()
此函数应用于将约束添加到您的自定义视图
func setupBaseDelegate()
此函数应用于设置视图的委托
import TTBaseUIKit
class YourCustomView : TTBaseUIView {
override func updateBaseUIView() {
super.updateBaseUIView()
}
}
extension YourCustomView :TTViewCodable {
func setupStyles() {
}
func setupCustomView() {
}
func setupConstraints() {
}
}
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) {
}
}
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)
setCenterXAnchor(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat)
setcenterYAnchor(_ view:UIView? = nil, isUpdate:Bool = false, constant:CGFloat)
TTBaseUIKit
提供了 String
(字符串)、Date
(日期)、Json
(JSON)、Device
(设备)、Language
(语言)、VietNamLunar
(越南农历)、Validation
(验证)、NetworkSpeedTest
(网络速度测试)的常用处理函数
借助 SwiftUI,Apple 为开发人员提供了一个统一的 UI 框架,用于在所有类型的 Apple 设备上构建用户界面。
TTBaseSUISpacer
在 SwiftUI 中,Spacer 视图主要用于布局和间距目的,它没有直接的属性来更改背景颜色或设置圆角半径。 但是,我们可以创建一个自定义类来添加一些常用的函数。
有关更多示例和用法,请参考示例项目 TTBaseUIKitExample
TTBaseUIKitExample,它提供了 BaseUIViewController、BaseUITableViewController、BaseCollectionViewController 等 UIKit 中的基础类,以及 SwiftUI 中的 BaseView、BaseButton、BaseText、BaseStack 等的全面示例。 理解这一点的最简单和最直接的方法是下载示例并运行它。
在我的工作中,我已经在许多项目中更新和使用了这个框架。 我的所有项目都使用 UI programmatically
(UI 编程式),而不是使用 Storyboard
。 以下是一些应用程序的屏幕截图
您可以在这里查看我所有的项目:链接
SwiftUI
解决了这个问题我一直在考虑。Truong Quang Tuan – 网站 – (电子邮件: truongquangtuanit@gmail.com)
你好,我是 Tuan (Quang-Tuan Truong 的简称)。 我是一名移动负责人,拥有多年的专业经验,在大公司和小型创业公司中构建应用程序和领导团队。
如果您有任何建议、问题或其他任何事情,请随时与我联系。 您可以通过电子邮件 truongquangtuanit@gmail.com 或通过我的网站联系我:https://tqtuan1201.github.io/
如果您有一个很棒的想法,但不知道如何开始? 不用担心,只需单击认识我的团队,我们就可以一起喝咖啡讨论您的项目
我们构建高质量的应用程序! 如果您在项目中需要帮助,请联系我们。