美文网首页
OC语言和Swift语言动态加载控制器->跳转

OC语言和Swift语言动态加载控制器->跳转

作者: ForScanf | 来源:发表于2018-01-13 16:30 被阅读112次

在一般的开发过程中,跳转页面只需要初始化需要跳转的页面,随即用模态跳转或者使用导航栏跳转。

一般情况下,我们都是直接初始化相应的控制器,然后实现跳转。当如果一个页面上按钮很多,比如tableview上每个row跳转的页面都不一样,这种方式就比较繁琐了。
OC

   OneViewController *vc = [[OneViewController alloc]init];    
   self.navigationController pushViewController:vc animated:YES];

Swift

  let vc = OneViewController()        
  self.navigationController?.pushViewController(vc, animated: true)

有时候我们在同一个页面上添加了很多的按钮,每个按钮跳转的类都不一样,这时候我们就需要动态加载控制器,可以将这些控制器的类名放进数组里。(注:这种方式是不能传递参数的)

OC

  NSMutableArray *MainBusinessArr = [NSMutableArray array];
    
  [MainBusinessArr addObject:@{@"title":@"业务联系人",@"icon":@"联系人",@"viewController":@"Business_contacts_ListViewController"}];

  NSString *ControllerStr = [[MainBusinessArr objectAtIndex:indexPath.row] objectForKey:@"viewController"];
  UIViewController* viewController = [[NSClassFromString(ControllerStr) alloc] init];
            
  [self.navigationController pushViewController:viewController animated:YES];

Swift

 var ListArr:NSMutableArray = []

 ListArr.add(["name":"添加联系人","image":"bm_addclient","viewController":"ContactAddViewController"])

 let dic:[String:String] =  ListArr.object(at: indexPath.row) as! [String:String]
 // 获取跳转的类名
 let targetVC:String = dic["viewController"]! 
 //获取命名空间
 var NameSpace = Bundle.main.infoDictionary!["CFBundleExecutable"]as? String   
 // 将Bunldle Identifier中的“-”改成“_”
 NameSpace = NameSpace?.replacingOccurrences(of: "-", with: "_")
        
 let clsName = NameSpace! + "." + targetVC
        
 let model = NSClassFromString(clsName) as! UIViewController.Type

 let vc = model.init()
        
 self.navigationController?.pushViewController(vc, animated: true)

项目命名空间中不能存在“-”字符,不然会没办法解析,无法跳转对应的类。

相关文章

  • OC语言和Swift语言动态加载控制器->跳转

    在一般的开发过程中,跳转页面只需要初始化需要跳转的页面,随即用模态跳转或者使用导航栏跳转。 一般情况下,我们都是直...

  • Swift和Objective-C的区别

    Swift是静态语言。OC是动态的语言。Swift要变成动态,需要继承NSObject或者桥接OC来实现。 Swi...

  • 面试题

    Swift和OC的区别? 1.swift是静态语言,有类型推断,OC是动态语言。2.swift面向协议编程,OC面...

  • ios面试

    一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。2.swift面向协议编程,OC...

  • swift面试题

    一.Swift和OC的区别? 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程,...

  • iOS面试

    # 一、OC与Swift的区别 1.swift是静态语言,有类型推断,OC是动态语言。 2.swift面向协议编程...

  • Swift 和 Objective-C的区别

    swift是静态语言 oc是动态语言 swift是面向协议编程 oc是面向对象编程 纯swift的函数派发方式是直...

  • 听故事学Swift系列 - 小明与红包(optionals -

    虽然都是基于Cocoa和CocoaTouch框架,虽然都属于动态运行模式的静态类型语言,但是Swift和OC两门语...

  • Swift与OC差异 - 基础概念

    弱引用、强引用 OC Swift 懒加载 OC Swift

  • OC+Swift语言封装AFN网络请求工具

    网络请求工具是我们经常用到的工具类,下面用OC语言和Swift语言封装AFNetworking网络请求工具,废话不...

网友评论

      本文标题:OC语言和Swift语言动态加载控制器->跳转

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