iOS (Swift) - Массив UIViewControllers - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть массив UIButton с уникальным значением tag.Когда данная кнопка нажата, я хочу загрузить и представить UIViewController, который также хранится в массиве равной длины.

Представляемые UIViewController являются подклассами подкласса UIViewController:

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

Я пытался сохранить массив подклассов AViewController, используя следующее:

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

, но я получаю ошибку Невозможно преобразовать значение типа '[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)

Пожалуйста, дайте мне знать, если это неправильный мыслительный процесс для того, чтобы сделать что-то подобное, пожалуйста, и спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужны экземпляры

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

, если 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

Тогда

array = [b,c,d]
...