Swift模拟从服务区端加载指定的控制器类型

本文介绍了一个使用 SwiftUI 实现的 TabBar 控制器,该控制器能够从 JSON 文件中动态加载配置信息来设置各个 Tab 的视图控制器、图标及标题等属性。若加载失败,则采用默认配置。
//
//  MainTableBarControllerViewController.swift
//  WeiboSwift
//
//  Created by hq on 16/6/6.
//  Copyright © 2016年 hanqing. All rights reserved.
//

import UIKit

class MainTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        addViewController()
        
    }
    
    //添加我们的tabbar控制器
    private func addViewController(){
        
        //模拟从远程加载我们控制器配置信息
        let jsonPath=NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil);
        
        if ((jsonPath) != nil){
            
            let jsonData=NSData(contentsOfFile: jsonPath!)
            
            do{
                //try 如果出错后,下边的代码不再执行,直接进入到catch
                //try! 如果程序出错,直接崩溃
                
                let jsonArray=try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
                
                //swift便利数组
                //必须明确数组类型[]表示数组,数组中每个元素key:value为String
                for dict in jsonArray as! [[String:String]]{
                    
                    addOneVC(dict["vcName"]!, img: dict["imageName"]!, selectedImg: dict["selImageName"]!, title: dict["title"]!)
                }
                
            }catch{
                
                print(error)
                //如果出错了,使用本地默认
                
                addOneVC("HomeViewController", img: "tabbar_home", selectedImg: "tabbar_home_highlighted", title: "首页")
                
                addOneVC("MessageViewController", img: "tabbar_message_center", selectedImg: "tabbar_message_center_highlighted", title: "消息")
                
                addOneVC("DiscoverViewController", img: "tabbar_discover", selectedImg: "tabbar_discover_highlighted", title: "发现")
                
                addOneVC("ProfileViewController", img: "tabbar_profile", selectedImg: "tabbar_profile_highlighted", title: "我的")
                
            }
        }


    }
    
    //添加一个导航控制器
    private func addOneVC(vcName: String ,img: String,selectedImg: String ,title: String ){
        
        //获取Info.plist项目的命名空间,并转换为字符串
       let nameSpace=NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
       
       //拼接命名空间,并将命名空间转换为我们的类
       let cla:AnyClass?=NSClassFromString(nameSpace + "." + vcName)
        
       let vcCla=cla as! UIViewController.Type
        
       //创建我们的类
       let vc=vcCla.init()
        
        
       vc.tabBarItem.image=UIImage(named: img)
        
       vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.grayColor()], forState: UIControlState.Normal)
        
       vc.tabBarItem.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.orangeColor()], forState: UIControlState.Selected)
        
       vc.tabBarItem.selectedImage=UIImage(named: selectedImg)
        
       vc.title=title;
        
       let nav=UINavigationController(rootViewController: vc)
        
       nav.navigationBar.titleTextAttributes=[NSForegroundColorAttributeName : UIColor.blackColor(),NSFontAttributeName:UIFont.systemFontOfSize(16)]
        
       addChildViewController(nav)
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
       
    }
    

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值