注:因为Swift新增了命名空间的概念,所以通过一个字符串来创建一个类必须加上命名空间
- 实现代码
func addChildViewController(childControllerName: String, title : String, imageName : String) {
//1.动态获取命名空间
guard let name = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as? String else {
return
}
//2.通过类名来创建对应的类
let cls : AnyClass? = NSClassFromString(name + "." + childControllerName)
//3.Swift中如果想通过一个Class来创建一个对象,必须告诉系统这个Class的确切类型
guard let clsType = cls as? UITableViewController.Type else {
return
}
//4.通过Class创建对象
let childController = clsType.init()
//5.设置controller的相关属性
childController.tabBarItem.image = UIImage(named: imageName)
childController.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
childController.title = title
let vc = UINavigationController.init(rootViewController: childController)
self.addChildViewController(vc)
}