美文网首页
使用NSClassFromString搭建界面

使用NSClassFromString搭建界面

作者: Demoer | 来源:发表于2016-10-10 20:26 被阅读766次

    如果我们开发中产品的多个界面的布局相同时,我们没有必要再在每个界面里单独布局,借用NSClassFromString用几行代码就可以全部搭建出。

    步骤一

    在工程中新建一个继承于UIViewController的母视图控制器BasicViewController,建立一个Xib文件,然后建立好所有的我们需要用到的子视图控制器,继承于BasicViewController

    在BasicViewController的Xib中设置好TabelView,在视图控制器中准守协议并实现协议里的方法。然后就完事了

    步骤二

    回到AppDelegate中

    配置好window界面

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.
            window = UIWindow.init(frame: UIScreen.mainScreen().bounds)
            
            //根视图控制器暂时使用ViewController()
            window?.rootViewController = ViewController()
            window?.backgroundColor = UIColor.whiteColor()
            window?.makeKeyAndVisible()
    
            return true
        }
    

    然后关键性的一步就来了,写一个创建根视图控制器的方法

    func creatRootViewController() -> UITabBarController {
                //首先创建一个数组,里面存放好我们建立的所有的视图控制器的名字不相同的一部分
            let names = ["First","Second","Third","Forth"]
            //创建数组,存放导航控制器
            var tabArr = [UIViewController]()
            //存放标签栏按钮标题
            for num in 0...2 {
                //通过拼接字符串,获得对应类的对象
                //格式为  工程名. + 上面name数组中的字符串 + ViewController
                let vcType = NSClassFromString("LoveLimiteWeb.\(names[num])ViewController") as! UIViewController.Type
                
                //使用父类的Xib,创建子类的对象
                let vc = vcType.init(nibName: "BaseViewController", bundle: nil)
                
                //创建导航控制器
                let nav = UINavigationController(rootViewController: vc)
                nav.tabBarItem.title = titles[num]
                tabArr.append(nav)
            }
            let tab = UITabBarController()
            tab.viewControllers = tabArr
            return tab
        }
        
    

    步骤三

    设置window的根视图控制器

    window?.rootViewController = creatRootViewController()

    备注

    不使用Xib

     let classNameString = ["First","Second","Third","Forth"]
     for i in 0...3{
            var className = "TableViewEditing."
            let middleName = classNameString[i]
            className += middleName
            className += "ViewController"
    
            let ClassName = NSClassFromString(className) as! UIViewController.Type
            //这儿不提示init(),手动打上去
            let vc = ClassName.init()
            
            }
    
    

    相关文章

      网友评论

          本文标题:使用NSClassFromString搭建界面

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