MBaseSDK
- MBaseSDK 提供一些强大的类和工具,帮助您做日常的事情!
功能
-
为您视图中的控件进行数据映射
- UILabel(设置文本)
- UIButton(设置文本)
- UITextField(设置文本)
- UITextView(设置文本)
- UIImageView(设置 UIImage 或 Image URL)
-
使您自定义的 ViewControl 更加可重用
-
方便的工具,用于将页面导航到另一个页面
-
内置 DemoPage 以演示您开发的所有页面
添加到 Podfile 中
pod 'MBaseSDK'
使用 MBaseSDK
数据映射的 BaseVC
Swift 文件
class MyVC: BaseVC {
override func viewDidLoad() {
super.viewDidLoad()
self.dataMap = ["btnTest":"Push me"]
}
}
UIDataProvider for BaseVC
MyDataProvider.swift
class MyDataProvider:UIDataProvider
{
var labelText = "UIDataProviderDemoVC"
var imageUrl = "https://cdn.carnews.com/thumb/1236x989/article/08f23f78-e682-11e9-a795-42010af00004/Dn8Lmhw6XCg8.jpg"
override func getDataMap() -> dataMapObj {
return ["labelTitle":labelText,
"btnTest":"Push me",
"ivImage":imageUrl]
}
}
UIDataProviderDemoVC.swift
class UIDataProviderDemoVC: BaseVC {
let myDataProvider = MyDataProvider()
override func viewDidLoad() {
super.viewDidLoad()
self.dataProvider = myDataProvider
}
//update values
@IBAction func didTestClicked(_ sender:Any){
myDataProvider.labelText = "Pressed"
myDataProvider.imageUrl = "https://fate-15th.com/assets/img/pc/img_main.jpg"
myDataProvider.notifyDataChange()
}
}
数据映射的 BaseListVC
MyBaseListVC.swift
class MyBaseListVC: BaseListVC {
let myBaseListVC_Data = MyBaseListVC_Data()
override func viewDidLoad() {
super.viewDidLoad()
self.dataProvider = myBaseListVC_Data
// Do any additional setup after loading the view.
}
override func cellNameMapForBase() -> [String] {
return ["MyBaseListCell","EmptyCell"]
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cellData = super.dataMapForCell(indexPath: indexPath)
let cellNib = cellData["nibName"] as? String ?? ""
if(cellNib == "EmptyCell")
{
return self.view.frame.height
}
return 100
}
func insertItems()
{
for i in 10...30 {
let itemId = String(i)
let title = String(i) + "." + "Title"
let descript = "descript-" + String(i)
let imageUrl = "https://www.fate-sn.com/assets_hf3/img/special/countdown/HF3-countdown100_"+String(i)+".jpg"
myBaseListVC_Data.addItem(itemId: itemId, title: title, descript: descript, imageUrl: imageUrl)
}
myBaseListVC_Data.notifyDataChange()
}
func cleanItems()
{
myBaseListVC_Data.cleanItems()
}
}
MyBaseListVC_Data.swift
class MyBaseListVC_Data: UIDataProvider {
private var items:[dataMapObj] = []
var showEmpty:Bool = true
{
didSet{
self.notifyDataChange()
}
}
func cleanItems()
{
items.removeAll()
self.notifyDataChange()
}
func addItem(itemId:String,title:String,descript:String,imageUrl:String)
{
var data = dataMapObj.init()
data["itemId"] = itemId
data["labelTitle"] = title
data["labelDescript"] = descript
data["ivIcon"] = imageUrl
self.items.append(data)
}
override init() {
super.init()
self.items.removeAll()
}
override func getTableData() -> [String : Any] {
var secArray:[dataMapObj] = []
var sec_1_node:dataMapObj = ["secName":""]
sec_1_node["dataMap"] = []
var cellArray:[dataMapObj] = []
for item in self.items
{
var itemData = item
itemData["nibName"] = "MyBaseListCell"
cellArray.append(itemData)
}
if(self.showEmpty && self.items.count == 0)
{
var itemDataEmpty = dataMapObj()
itemDataEmpty["nibName"] = "EmptyCell"
itemDataEmpty["labelEmpty"] = "EMPTY"
cellArray.append(itemDataEmpty)
}
sec_1_node["list"] = cellArray
secArray.append(sec_1_node)
var tableData:dataMapObj = [:]
tableData["list"] = secArray
return tableData
}
}
重复使用 BaseVC 子类
将viewController绑定到视图
@IBOutlet weak var viewList:UIView!
func AttachMyBaseListVC(){
super.appendViewController(type: MyBaseListVC.self, nibName: "MyBaseListVC", controlId: "MyBaseListVC", to: self.viewList)
}
通过 controlId 获取viewController
@IBAction func didCleanClicked(_ sender:Any){
let myBaseListVC = super.getSubViewControlByID("MyBaseListVC") as? MyBaseListVC
myBaseListVC?.cleanItems()
}
使用 BasePageVC
- 继承 BasePageVC 并提供必需的方法
class MyVC: BasePageVC {
override class func getPageIdentity() -> String {
return "2.UIDataProvider Demo"
}
override class func getPageNibName() -> String {
return "UIDataProviderDemoVC"
}
override class func getAuthor() -> MBAuthor {
return AuthorDef.Mio
}
}
跳转到另一个页面
- 推送页面
@IBAction func didPushClicked(_ sender:Any){
PageTool.doPushPage(identity: "1.BaseVC Demo", initData: [:], vc: self, dismissResult: nil)
}
- 显示页面
@IBAction func didPresentClicked(_ sender:Any){
PageTool.doPresentPage(identity: "1.BaseVC Demo", initData:initData, vc: self, dismissResult: nil)
}
内置 DemoVC
- 在 AppDelegate.swift 中调用 MBUtility.prepareDemoPage() 将所有 BasePageVC 子类连接到演示页面
func scanAndBuildPages(){
MBAuthorCenter.insertAuthor(author: AuthorDef.Mio)
MBUtlity.prepareDemoPage()
}
- 调用 MBUtility.createDemoPage() 获取控制器
func enterDemoStage(){
let pageVC = MBUtlity.createDemoPage()
let naviVC = UINavigationController.init(rootViewController: pageVC)
naviVC.navigationBar.isHidden = true
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = naviVC
self.window?.makeKeyAndVisible()
}