Как правильно инициализировать UIViewController с помощью Swift, когда раскадровки не используются? - PullRequest
0 голосов
/ 04 августа 2020

Я хочу избавиться от раскадровок в моем проекте. Все написано в коде, но у меня все еще есть UIViewController (ы) в качестве ссылки.

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

func presentAttributeOptions(_ attribute: Attribute, controller: ProductViewController) {

    let storyboard = UIStoryboard(name: Storyboards.Product, bundle: nil)
    let destination = storyboard.instantiateViewController(withIdentifier: Controllers.Attributes) as! AttributeOptionsViewController

    destination.providesPresentationContextTransitionStyle = true
    destination.definesPresentationContext = true
    destination.modalPresentationStyle = .overFullScreen
    destination.attribute = attribute
    destination.selectOptionDelegate = controller
    present(destination, animated: true, completion: nil)
}

Однако, удалив ссылку на раскадровку и используя метод, показанный ниже, я получаю такие ошибки, как в этом примере «Значение типа 'ProductViewController' не имеет члена 'attribute'» и «Value of type» ProductViewController 'не имеет члена' selectOptionDelegate '"

func presentAttributeOptions(_ attribute: Attribute, controller: ProductViewController) {

    let destination = ProductViewController()

    destination.providesPresentationContextTransitionStyle = true
    destination.definesPresentationContext = true
    destination.modalPresentationStyle = .overFullScreen
    destination.attribute = attribute
    destination.selectOptionDelegate = controller
    present(destination, animated: true, completion: nil)
}

Я нашел несколько ответов, но ни один из них, похоже, не работал, как, например, добавление следующих методов init (), показанных ниже, в UIViewController. Что мне не хватает?

// This allows you to initialize your custom UIViewController without a nib or bundle.
convenience init() {
    self.init(nibName: nil, bundle: nil)
}

// This extends the superclass.
override init(nibName: String?, bundle: Bundle?) {
    super.init(nibName: nil, bundle: nil)
}

// This is also necessary when extending the superclass.
required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented") // or see Roman Sausarnes's answer
}

1 Ответ

0 голосов
/ 05 августа 2020

Я просто вижу это:

  • с раскадровкой, назначение имеет тип AttributeOptionsViewController
  • без, назначение имеет тип ProductionViewController

Это может быть причина

...