【问题标题】:How get CLASS from UIViewController如何从 UIViewController 获取 CLASS
【发布时间】:2019-04-12 17:53:46
【问题描述】:

我有 UIViewController 以及如何将 UIViewController 转换为 Class.swift。类已初始化...

MainController.staticInstance.viewControllers?[1] as! Destination

MainController 是扩展 UITabBarController 的类。我想从 UITabBar 获取子控制器并将其转换为父类。

明显的例子:

class MainController: UITabBarController {
override func viewDidLoad() {
  (self.viewControllers?[1] as! Destination).itsMyFunction();
 }
}

最大细节:

1 类

class First: UIViewController {
 func itsMyFunction() {
  print("Hello world!")
 }
}

这是我在 STORYBOARD 中附加到班级的班级!

2 类

class MainController: UITabBarController {
     func override viewDidLoad() {
       // Here I set index UITabBar ITEM which attach to MAIN UiTabBarController
       self.selectedIndex = 0
       // NOW I want to get INSTANCE CLASS First
       (self.viewControllers?[1] as! First).itsMyFunction();
     }
}

【问题讨论】:

  • 你在问什么?发布的代码是否会产生错误,如果有,是什么错误?
  • MainController 是扩展 UITabBarController 的类。我想从 UITabBar 获取子控制器并将其转换为父类。
  • 你的意思是将它转换为哪个父类 ??
  • 1.我有 UITabBarController,它有四个 tabBarItem。 2. 我想访问与情节提要中的类绑定的第一个控制器。
  • 你不是已经在as! Destination 做了吗?你的Destination不是你说的Class吗?

标签: ios swift


【解决方案1】:

您能按照这个设置示例进行操作吗?

class TabBarViewController: UITabBarController {

let firstVC = First()
let secondVC = SecondViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    firstVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)
    secondVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 1)

    let tabBarList = [firstVC, secondVC]

    viewControllers = tabBarList

    if let destination = viewControllers?.first as? First {
      destination.itsMyFunction()
    }
  }
}

您似乎无法获得controllerClass 实例,因为根据您发布的代码,您的viewControllers 数组为空。让我知道它是否有效。

【讨论】:

    【解决方案2】:

    这样,如果类型不同,您就会崩溃。尽量避免使用!随时你可以。 使用弱强制转换并评估未包装的类型(如果是您的类型)。

    if let destination = destMainController.staticInstance.viewControllers?.first as? Destination {
         destination.itsMyFunction()
    }
    

    【讨论】:

    • 它不想将控制器转换为类实例
    • 那么你需要更清楚地描述你的问题。
    • 我在顶部添加了最大的细节
    • 我做不到??
    • 你的意思是班级的名字? classForCoder?
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多