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