加载json数据创建控制器

//
//  MainViewController.swift

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad()
    {
        super.viewDidLoad()

        // 0.设置当前控制器对应的tabBar的颜色
        tabBar.tintColor = UIColor.orangeColor()

        // 1.从json数据创建控制器
        // 注意:我们这里是从本地加载的json数据,实际开发一般是从服务器端获取
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        if let jsonPath = path
        {

            let jsonData = NSData(contentsOfFile: jsonPath)

            do{
                // 有可能发生异常的代码放到这里
                // try 发生异常会跳到catch中继续执行
                // try! 发生异常程序会直接崩溃
                 let dictArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)

                // 遍历数组
                // 在Swift中,遍历一个数组,必须明确数据的类型
                for dict in dictArr as! [[String:String]] {
                    // addChildViewController参数必须有值,但是字典的返回值是可选类型
                    // 所以要加 !号
                    addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
                }

            }catch{
                // 发生异常之后执行的代码
                // 从本地创建控制
                addChildViewController("HomeTableViewController", title: "首页", imageName: "tabbar_home")
                addChildViewController("MessageTableViewController", title: "消息", imageName: "tabbar_message_center")
                addChildViewController("DiscoverTableViewController", title: "广场", imageName: "tabbar_discover")
                addChildViewController("ProfileTableViewController", title: "我", imageName: "tabbar_profile")
            }
        }

    }

    /**
     初始化子控制器

     - parameter childControllerName: 需要初始化的子控制器名称
     - parameter title:           子控制器的标题
     - parameter imageName:       子控制器的图片
     */
    private func addChildViewController(childControllerName: String, title:String, imageName:String)
    {
        // 0.动态获取命名空间
        // 默认情况下命名控件就是项目的名称(注意项目名称不要有中横线,如"Swift-weibo")
        let namespace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        // 将字符串转换为类
        let cls:AnyClass? = NSClassFromString(namespace + "." + childControllerName)
        // 将AnyClass转为指定的类型
        let vcCls = cls as! UIViewController.Type

        // 通过class创建对象
        let vc = vcCls.init()

        // 1.设置子控制器对应的数据
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        vc.title = title

        // 2.给子控制器包装一个导航控制器
        let nav = UINavigationController()
        nav.addChildViewController(vc)

        // 2.将导航控制器添加到当前控制器上
        addChildViewController(nav)
    }
}

json数据:

[
 {
    "vcName": "HomeTableViewController",
    "title": "首页",
    "imageName": "tabbar_home"
 },
 {
     "vcName": "MessageTableViewController",
     "title": "消息",
     "imageName": "tabbar_message_center"
 },
 {
     "vcName": "DiscoverTableViewController",
     "title": "广场",
     "imageName": "tabbar_discover"
 },
 {
     "vcName": "ProfileTableViewController",
     "title": "我",
     "imageName": "tabbar_profile"
 }
 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值