起因:TabBarViewController需要创建子视图,
遇到的问题:NSClassFromString取不到对应的class
解决:需要在类名前面添加命名空间
tip:使用guard做检查,可以使代码的逻辑性更强
private func addChildVC(childVcName:String,title:String,imageName:String){
//1.获取命名空间
guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else{
print("没有获取到命名空间")
return
}
//2.根据字符串获取对应的Class
guard let childVCClass = NSClassFromString(nameSpace+"."+childVcName) else {
print("没有获取到字符串对应的Class")
return
}
//3.将对应的AnyObject转成控制器类型
guard let childType = childVCClass as? UIViewController.Type else{
print("没有获取对应控制器的类型")
return;
}
//创建控制器对象
let childVc = childType.init()
childVc.title = title
childVc.tabBarItem.image = UIImage(named: imageName)
childVc.tabBarItem.selectedImage = UIImage(named: imageName+"_highlighted")
let childNav = UINavigationController(rootViewController: childVc)
addChild(childNav)
}