美文网首页
iOS 字符串转化为类(进行控制器跳转)

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

作者: rockyMJ | 来源:发表于2017-01-06 19:28 被阅读1069次

需求是后台传来一个控制器的名字,然后进行跳转.
在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 字符串转化为类(进行控制器跳转)

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