iOS 字符串转化为类(进行控制器跳转)

释放双眼,带上耳机,听听看~!

需求是后台传来一个控制器的名字,然后进行跳转.
在string的分类里写的方法

/**
* @brief 将字符串转化为控制器.
*
* @param str 需要转化的字符串.
*
* @return 控制器(需判断是否为空).
*/
- (UIViewController*)stringChangeToClass:(NSString *)str {
id vc = [[NSClassFromString(str) alloc]init];
if ([vc isKindOfClass:[UIViewController class]]) {
return vc;
}
return nil;
}

注意返回的是UIViewController对象,可直接进行跳转

UIViewController* vc = [str stringChangeToClass:str];
if (vc) {
[vc setValue:@"sjssj" forKey:@"test"];
[weakSelf.navigationController pushViewController:vc animated:YES];
}

swift:
但是在Swift中由于命名空间的存在导致这样的转化,会有一定的麻烦,我们可以用下面的方法进行转化。

func getClass(stringName: String) -> Class {
//根据字符串获取对应的class,在Swift中不能直接使用

String的延展

import UIKit
extension String{
func stringChangeToVC() -> UIViewController?{
//Swift中命名空间的概念
var vc = UIViewController()
if let nameSpage = Bundle.main.infoDictionary!["CFBundleExecutable"] as? String {
if let childVcClass = NSClassFromString(nameSpage + "." + self) {
if let childVcType = childVcClass as? UIViewController.Type {
//根据类型创建对应的对象
vc = childVcType.init() as UIViewController
return vc
}
}
}
return nil
}
}

控制器中的调用

let str = "MJTableViewController"
if let vc=str.stringChangeToVC(){
self.present(vc, animated: true, completion: nil)
}
//即可跳转到叫"MJTableViewController"的控制器

人已赞赏
iOS文章

iOS 自定义日历

2020-2-21 10:16:31

iOS文章

iOS 多任务全部执行完后再执行操作

2020-2-21 14:20:19

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索