- 1.獲取命名空間并把字符串轉(zhuǎn)化為指定的類控制器對象
更改命名空間
// 1.動態(tài)獲取命名空間
let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String
// 2.將字符串轉(zhuǎn)換為類
// 2.1.默認(rèn)情況下命名空間就是項目的名稱,但是命名空間的名稱是可以更改的
let Clas: AnyClass? = NSClassFromString(namespace + "." + childControllerName)
// 3.通過類創(chuàng)建對象
// 3.1.將AnyClass 轉(zhuǎn)化為指定的類
let vcClass = Clas as! UIViewController.Type
// 4.通過class創(chuàng)建對象
let vc = vcClass.init()
-
2.搭建項目的源碼
import UIKit class MainViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.brown // 設(shè)置當(dāng)前控制器對應(yīng)的tabbar對應(yīng)的顏色 // 注意:在ios7以前如果設(shè)置了tintColor只會改變字的顏色,圖片的顏色不會改變 tabBar.tintColor = UIColor.orange addChileControllers() } // MARK: 添加子控制器 private func addChileControllers(){ addChildViewController(childControllerName: "HomeViewController", tittle: "首頁", imageName: "tabbar_home") addChildViewController(childControllerName: "MessageViewController", tittle: "消息", imageName: "tabbar_message_center") addChildViewController(childControllerName: "DiscoverViewController", tittle: "廣場", imageName: "tabbar_discover") addChildViewController(childControllerName: "ProfileViewController", tittle: "我", imageName: "tabbar_profile") } // MARK: 具體的每個控制器的操作 private func addChildViewController(childControllerName: String,tittle:String ,imageName:String) { // 1.動態(tài)獲取命名空間 let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String // 2.將字符串轉(zhuǎn)換為類 // 2.1.默認(rèn)情況下命名空間就是項目的名稱,但是命名空間的名稱是可以更改的 let Clas: AnyClass? = NSClassFromString(namespace + "." + childControllerName) // 3.通過類創(chuàng)建對象 // 3.1.將AnyClass 轉(zhuǎn)化為指定的類 let vcClass = Clas as! UIViewController.Type // 4.通過class創(chuàng)建對象 let vc = vcClass.init() // 1.設(shè)置首頁對應(yīng)的數(shù)據(jù) vc.tabBarItem.image = UIImage(named: imageName) vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted") vc.title = tittle // 2.給子控制器包裝一個導(dǎo)航控制器 let nav = UINavigationController() nav.addChildViewController(vc) // 3.將導(dǎo)航控制器添加到當(dāng)前控制器上 addChildViewController(nav) } }