在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
import UIKit
class MainTableViewController: UITabBarController {
override func viewDidLoad() { super.viewDidLoad() tabBar.tintColor = UIColor.orange
guard let filePath = Bundle.main.path(forResource: "MainVCSettings", ofType: "json") else { NSLog(message: "数据有误") return } guard let data = NSData.init(contentsOfFile: filePath) else { return } do { let objc = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String : AnyObject]] for dict in objc { let title = dict["title"] as? String let vcName = dict["vcName"] as? String let imageName = dict["imageName"] as? String addChildViewController(vcName, titleName: title, imageName: imageName) } } catch { addChildViewController("HomeTableViewController", titleName: "首页", imageName: "tabbar_home") addChildViewController("MessageTableViewController", titleName: "消息", imageName: "tabbar_message_center") addChildViewController("DiscoverTableViewController", titleName: "发现", imageName: "tabbar_discover") addChildViewController("ProfileTableViewController", titleName: "我", imageName: "tabbar_profile") }
}
func addChildViewController(_ childControllerName: String?,titleName: String?,imageName:String?){
guard let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else { NSLog(message: "获取命名空间失败") return }
var cls:AnyClass? = nil if let vcName = childControllerName { cls = NSClassFromString(name + "." + vcName) }
guard let typeCls = cls as? UITableViewController.Type else{ return }
let childController = typeCls.init() addChildViewControllerClass(childController, titleName: titleName, imageName: imageName)
} //添加一个子控制器 func addChildViewControllerClass(_ childController: UITableViewController,titleName: String?,imageName:String?) { //设置自控制器相关属性 // childController.tabBarItem.title = titleName // childController.navigationItem.title = titleName //该方法会由内向外的设置标题
if let ivName = imageName { childController.tabBarItem.image = UIImage.init(named: ivName) childController.tabBarItem.selectedImage = UIImage.init(named: "\(ivName)_highlighted") } if let navTitle = titleName { childController.title = navTitle } //包装一个导航控制器 let nav = UINavigationController.init(rootViewController: childController) //设置导航栏的背景颜色 nav.navigationBar.barTintColor = UIColor.lightGray //标题颜色 let dic = [NSAttributedString.Key.foregroundColor : UIColor.orange,NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18)] nav.navigationBar.titleTextAttributes = dic //item颜色 nav.navigationBar.tintColor = UIColor.gray addChild(nav) } }
前边 if let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String { 中的name就是这里设置的 如果再加上服务器网络请求可以做成动态的实现apptabbar展示页等。但是这些页面必须提前做好放到项目里面 我在本地添加了一个.json文件
|
请发表评论