MBaseSDK 1.0.52

MBaseSDK 1.0.52

mio chen 维护。



MBaseSDK 1.0.52

  • 作者
  • mio

MBaseSDK

  • MBaseSDK 提供一些强大的类和工具,帮助您做日常的事情!

功能

  • 为您视图中的控件进行数据映射

    • UILabel(设置文本)
    • UIButton(设置文本)
    • UITextField(设置文本)
    • UITextView(设置文本)
    • UIImageView(设置 UIImage 或 Image URL)
  • 使您自定义的 ViewControl 更加可重用

  • 方便的工具,用于将页面导航到另一个页面

  • 内置 DemoPage 以演示您开发的所有页面

添加到 Podfile 中

pod 'MBaseSDK'

使用 MBaseSDK

数据映射的 BaseVC

xib 文件
image

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()
}

参考