使用NSClassFromString搭建界面

如果我们开发中产品的多个界面的布局相同时,我们没有必要再在每个界面里单独布局,借用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搭建界面)