通过字符串创建对象

通过重写UITabBarControlleraddChildViewController函数,实现利用String(类名)生成相应对象

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    private func addChildViewController(VCName : String, title : String, iconName : String) {
        
        //获取命名空间
        guard let nameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {
            return
        }
        
        //根据字符串获取对应的Class
        guard let VCClass = NSClassFromString(nameSpace + "." + VCName) else {
            return
        }
        
        //将对应的AnyObject转成控制器的类型
        guard let VCType = VCClass as? ViewController.Type else {
            return
        }
        //创建对应的控制器对象
        let childVC = VCType.init()
        
        //设置控制器属性
        childVC.title = title
        childVC.tabBarItem.image = UIImage(named: iconName)
        childVC.tabBarItem.selectedImage = UIImage(named: iconName + "_highlighted")
        
        //生成导航栏控制器
        let childNav = UINavigationController(rootViewController: childVC)
        
        //添加控制器
        addChildViewController(childNav)
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,212评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,472评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,771评论 0 4
  • 劳拉·布朗的《完全写作指南》中提供了一套非常清晰的写作流程:明确目标,读者思维,头脑风暴,组织好内容,再拟定初稿,...
    海边里的贝阅读 2,118评论 0 0

友情链接更多精彩内容