iosarraysswiftuiviewcontrollerpresentmodalviewcontroller

iOS (Swift) - Array of UIViewControllers


I have an array UIButtons that have a unique tag value. When a given button is pressed, I want to load and present a UIViewController that is also stored in an array of equal length.

The UIViewControllers to be presented are subclasses of a subclass of UIViewController:

class AViewController: UIViewController {}
class BViewController: AViewController {}
class CViewController: AViewController {}
class DViewController: AViewController {}
// ... etc.

I've tried storing the array of AViewController subclasses using the following:

private var array: [AViewController] = [BViewController.self, CViewController.self, DViewController.self]

but I get the error Cannot convert value of type '[BViewController].Type' to specified type '[AViewController]' for the first element.

I will then present BViewController (for instance) using the following:

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

Please let me know if this is the incorrect thought process for doing something like this please and thanks for any help.


Solution

  • You need instances

    private var array: [AViewController] = [BViewController(), CViewController(), DViewController()]
    

    if the vcs are in IB , then you would do

    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
    

    Then

    array = [b,c,d]