如何从UIViewController

时间:2019-04-12 07:28:20

标签: ios swift

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

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

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

明显的例子:

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();
     }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

可以请您按照此设置示例进行操作吗?

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()
    }
  }
}

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