美文网首页
swift动态添加控制器

swift动态添加控制器

作者: 夏至樱花祭 | 来源:发表于2019-01-28 10:42 被阅读0次

    项目中有一个需求,根据用户登陆的角色显示对应的界面。框架使用tabbar+nav模式。每中角色有自己的babaritem名称。在swift中要想根据控制的名称来创建控制,最主要的是要获取当前的命名空间。然后在创建对应的控制器。主要代码如下:

      //1:动态获取命名空间,开发中应该充分利用guard语句,guard可以有效的解决可选绑定容易形成{}嵌套问题
                guard  let name = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String else {
                    print("获取命名空间失败")
                    return
                }
                
                //2:根据字符串获取Class
                var cls: AnyClass? = nil
                //model.controllerName是需要创建的控制器的名称(string类型)
                if let controllerName = model.controllerName{
                    cls = NSClassFromString(name + "." + controllerName)
                }
                
                //Swift中如果想通过一个Class来创建一个对象, 必须告诉系统这个Class的确切类型,这里注意:所有的视图控制器都是继承于UIViewController
                guard let typeClass = cls as? UIViewController.Type else {
                    print( "cls不能当做UIViewController")
                    return
                }
                //通过Class创建对象
                let childVC = typeClass.init()
    

    最近重新学习swift。发现之前写的添加控制器代码过于使用oc的模式。现在发现swift自己的方式更加简洁。代码如下

    func createChild(title: String,image: String,selectImage: String, _ clses:BaseViewController.Type){
            
            let child = UINavigationController.init(rootViewController: clses())
            child.title = title
            child.tabBarItem.image = UIImage.init(named: image)
            child.tabBarItem.selectedImage = UIImage.init(named: selectImage)
            
            child.tabBarItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .selected)
            
            self.addChild(child)
            
        }
    

    这里主要使用swift的Type类型。使用Type类型创建控制器。

    相关文章

      网友评论

          本文标题:swift动态添加控制器

          本文链接:https://www.haomeiwen.com/subject/tuaojqtx.html