iOS(Swift) - UIViewControllers数组

ale*_*wis 1 arrays uiviewcontroller presentmodalviewcontroller ios swift

我有一个UIButton具有唯一tag值的数组.当按下给定按钮时,我想加载并呈现一个UIViewController也存储在等长的数组中.

UIViewController要呈现的s是子类的子类UIViewController:

class AViewController: UIViewController {}
class BViewController: AViewController {}
class CViewController: AViewController {}
class DViewController: AViewController {}
// ... etc.
Run Code Online (Sandbox Code Playgroud)

我已经尝试AViewController使用以下内容存储子类数组:

private var array: [AViewController] = [BViewController.self, CViewController.self, DViewController.self]
Run Code Online (Sandbox Code Playgroud)

但我得到错误无法将类型'[BViewController] .Type'的值转换为第一个元素的指定类型'[AViewController]'.

然后,我将BViewController使用以下内容(例如):

let ViewController = array[button.tag].self
var viewController: AViewController
viewController = ViewController.init()
viewController.transitioningDelegate = self
viewController.modalPresentationStyle = .custom
present(viewController, animated: true)
Run Code Online (Sandbox Code Playgroud)

请告诉我,如果这是一个不正确的思考过程,请做这样的事情,并感谢您的帮助.

Sh_*_*han 7

你需要实例

private var array: [AViewController] = [BViewController(), CViewController(), DViewController()]
Run Code Online (Sandbox Code Playgroud)

如果vcs在IB中,那么你会这样做

let b = self.storyboard!.instantiateViewController(withIdentifier: "bID") as! BViewController
let c = self.storyboard!.instantiateViewController(withIdentifier: "cID") as! CViewController 
let d = self.storyboard!.instantiateViewController(withIdentifier: "dID") as! DViewController
Run Code Online (Sandbox Code Playgroud)

然后

array = [b,c,d]
Run Code Online (Sandbox Code Playgroud)