动态呈现 ViewController
Posted
技术标签:
【中文标题】动态呈现 ViewController【英文标题】:Presenting ViewController Dynamically 【发布时间】:2021-07-22 17:49:45 【问题描述】:我正在展示一个像这样的 ViewController
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let ViewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.present(ViewController, animated: true, completion: nil)
有没有办法动态传递故事板名称、标识符和视图控制器类型
【问题讨论】:
***.com/a/58379054/14733292 【参考方案1】:创建新文件 StoryBoard.swift
let mainBundle = Bundle.main
enum Storyboard: String
case main = "Main"
case TeamLeader = "TeamLeader"
case Installer = "Installer"
extension Storyboard
var instance: UIViewController
return UIStoryboard(name: Storyboard.main.rawValue, bundle: mainBundle).instantiateViewController(withIdentifier: self.rawValue)
创建新的 ControllerIdentifier.swift 文件
enum ControllerIdentifier: String
case CustomerDetailsVC
case TeamVC
case MyProfileVC
case CancelOrderVcViewController
case ApprovingCustomerVC
case RequestsDetailVC
case NewrequestTL
case ApprovedTLVC
case HistoryTLVC
case SettingsTeamleaderVC
case HistoryDetailVC
case ApprovingCustomerFirstVC
case ApprovingCustomerSecondVC
case ApprovingCustomerForthVC
case ApprovingCustomerFifthVC
case tabbar2
case ApprovingCustomerThridVC
case SignatureVC
case NewRequestsVC
case tabbar
case LoginVC
case CustomerDetailsTL
case InstallationApprovingFirstVC
case InstallationApprovingSecondVC
case InstallerDashBoardVC
case tabbar3
case HistoryInstallerVC
case OrderInProgressVC
case SettingsInstallerVc
case RequestDetailInstallerVC
case HistoryDetailsInstallerVC
case LocationInstallerVC
case CancelOrderInstallerVC
case MyProfileInstallerVC
extension UIViewController
func pushToController(from name : Storyboard, identifier: ControllerIdentifier)
DispatchQueue.main.async [self] in
let storyboard = UIStoryboard(name: name.rawValue, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: identifier.rawValue)
navigationController?.pushViewController(vc,animated: true)
func pushToRoot(from name : Storyboard, identifier: ControllerIdentifier)
DispatchQueue.main.async [self] in
let storyboard = UIStoryboard(name: name.rawValue, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: identifier.rawValue)
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: true, completion: nil)
func imageScreenPush(from name : Storyboard, identifier: ControllerIdentifier)
DispatchQueue.main.async [self] in
let storyboard = UIStoryboard(name: name.rawValue, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: identifier.rawValue)
let navigationController = UINavigationController(rootViewController: vc)
navigationController.modalPresentationStyle = .overCurrentContext
self.present(navigationController, animated: true, completion: nil)
如何使用
self.pushToController(from: .Installer, identifier: .tabbar3)
确保在 Enum 案例中 StoryBoard Name 和 UIViewController Identifier 应该相同
【讨论】:
以上是关于动态呈现 ViewController的主要内容,如果未能解决你的问题,请参考以下文章