OC語(yǔ)言和Swift語(yǔ)言動(dòng)態(tài)加載控制器->跳轉(zhuǎn)

在一般的開(kāi)發(fā)過(guò)程中,跳轉(zhuǎn)頁(yè)面只需要初始化需要跳轉(zhuǎn)的頁(yè)面,隨即用模態(tài)跳轉(zhuǎn)或者使用導(dǎo)航欄跳轉(zhuǎn)。

一般情況下,我們都是直接初始化相應(yīng)的控制器,然后實(shí)現(xiàn)跳轉(zhuǎn)。當(dāng)如果一個(gè)頁(yè)面上按鈕很多,比如tableview上每個(gè)row跳轉(zhuǎn)的頁(yè)面都不一樣,這種方式就比較繁瑣了。
OC

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

Swift

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

有時(shí)候我們?cè)谕粋€(gè)頁(yè)面上添加了很多的按鈕,每個(gè)按鈕跳轉(zhuǎn)的類(lèi)都不一樣,這時(shí)候我們就需要?jiǎng)討B(tài)加載控制器,可以將這些控制器的類(lèi)名放進(jìn)數(shù)組里。(注:這種方式是不能傳遞參數(shù)的)

OC

  NSMutableArray *MainBusinessArr = [NSMutableArray array];
    
  [MainBusinessArr addObject:@{@"title":@"業(yè)務(wù)聯(lián)系人",@"icon":@"聯(lián)系人",@"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":"添加聯(lián)系人","image":"bm_addclient","viewController":"ContactAddViewController"])

 let dic:[String:String] =  ListArr.object(at: indexPath.row) as! [String:String]
 // 獲取跳轉(zhuǎn)的類(lèi)名
 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)

項(xiàng)目命名空間中不能存在“-”字符,不然會(huì)沒(méi)辦法解析,無(wú)法跳轉(zhuǎn)對(duì)應(yīng)的類(lèi)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容