Swift开发

Seift 动态初始化项目的控制器

2017-12-07  本文已影响8人  追逐_chase
Swift.png

我们在编程的过程中一搬框架的控制器都是固定,一般都是 用TabBarController管理4个或者更多 Nav(导航控制器),用Nav管理子控制器。


 //1.获取路径
        
        guard let  path = Bundle.main.path(forResource: "MainVCSettings.json", ofType: nil) else {
            
            return;
        }
        
        guard let jsonData = NSData(contentsOfFile:path) else {
            
            return;
        }

  //在调用的方法时 最后有一个throws时,该方法会跑出异常
        
        guard let anyObject = try? JSONSerialization.jsonObject(with:jsonData as Data, options: .mutableContainers) else {
            
            return;
        }
        
        
        guard let dicArray =  anyObject as? [[String:Any]] else {
            
            
            return;
        }
        
  for dict in dicArray {
            
            guard let title = dict["title"] as? String else {
                continue
            }
            
            print(title);
            guard let vcName = dict["vcName"] as? String else {
                continue
            }
            
            guard let imageName = dict["imageName"] as? String else {
                continue
            }
            
            // 方法重载 注意
           addChildViewController(childVcName: vcName, title: title, imageName: imageName);
        }
        

//写一个类扩展
extension CCTabBarVC {
  private func addChildViewController(childVcName: String, title : String, imageName : String) {
        
        // 0.获取命名空间
        guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {
            print("有没有")
            return
        }
        
        // 1.根据字符串获取对应的Class
        guard let ChildVcClass = NSClassFromString(nameSpace + "." + childVcName) else {
           
            return
        }
        
        // 2.将对应的AnyObject转成控制器的类型
        guard let childVcType = ChildVcClass as? UIViewController.Type else {
   
            return
        }
        
        // 3.创建对应的控制器对象
        let childVc = childVcType.init()
        
        // 4.设置子控制器的属性
        childVc.title = title
        childVc.tabBarItem.image = UIImage(named: imageName)
        childVc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        
        // 5.包装导航栏控制器
        let childNav = UINavigationController(rootViewController: childVc)
        
        // 6.添加控制器
        addChildViewController(childNav);
    }
}


上一篇 下一篇

猜你喜欢

热点阅读