• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift_使用命名空间创建

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

import UIKit

 

class MainTableViewController: UITabBarController {

    

    override func viewDidLoad() {

        super.viewDidLoad()

        tabBar.tintColor = UIColor.orange

        

        guard let filePath = Bundle.main.path(forResource: "MainVCSettings", ofType: "json") else {

            NSLog(message: "数据有误")

            return

        }

        guard let data = NSData.init(contentsOfFile: filePath) else {

            return

        }

        do {

            let  objc = try

                JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String : AnyObject]]

            for dict in objc {

                let  title = dict["title"] as? String

                let  vcName = dict["vcName"] as? String

                let  imageName  = dict["imageName"] as? String

                addChildViewController(vcName, titleName: title, imageName: imageName)

            }

        } catch  {

            addChildViewController("HomeTableViewController", titleName: "首页", imageName: "tabbar_home")

             addChildViewController("MessageTableViewController", titleName: "消息", imageName: "tabbar_message_center")

             addChildViewController("DiscoverTableViewController", titleName: "发现", imageName: "tabbar_discover")

             addChildViewController("ProfileTableViewController", titleName: "我", imageName: "tabbar_profile")

        }

        

    }

    

    func addChildViewController(_ childControllerName: String?,titleName: String?,imageName:String?){

        

        guard let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {

            NSLog(message: "获取命名空间失败")

            return

        }

        

        

        var cls:AnyClass? = nil

        if let vcName = childControllerName {

            cls = NSClassFromString(name + "." + vcName)

        }

        

        

        guard let typeCls = cls as? UITableViewController.Type else{

            return

        }

        

        let childController = typeCls.init()

        addChildViewControllerClass(childController, titleName: titleName, imageName: imageName)

 

    }

    //添加一个子控制器

    func addChildViewControllerClass(_ childController: UITableViewController,titleName: String?,imageName:String?) {

          //设置自控制器相关属性

//        childController.tabBarItem.title = titleName

//         childController.navigationItem.title = titleName

         //该方法会由内向外的设置标题

        

        if let ivName = imageName {

            childController.tabBarItem.image = UIImage.init(named: ivName)

            childController.tabBarItem.selectedImage = UIImage.init(named: "\(ivName)_highlighted")

        }

        if let navTitle = titleName {

              childController.title = navTitle

        }

         //包装一个导航控制器

        let nav = UINavigationController.init(rootViewController: childController)

         //设置导航栏的背景颜色

         nav.navigationBar.barTintColor = UIColor.lightGray

        //标题颜色

         let dic = [NSAttributedString.Key.foregroundColor : UIColor.orange,NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18)]

        nav.navigationBar.titleTextAttributes = dic

         //item颜色

         nav.navigationBar.tintColor = UIColor.gray

        addChild(nav)

    }

}

 

前边     if let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String {

中的name就是这里设置的

如果再加上服务器网络请求可以做成动态的实现apptabbar展示页等。但是这些页面必须提前做好放到项目里面

我在本地添加了一个.json文件

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
什么是 LLVM?Swift, Rust, Clang 等语言背后的原力发布时间:2022-07-13
下一篇:
[Swift]LeetCode1001. 网格照明 | Grid Illumination发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap