美文网首页
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