Я хочу избавиться от раскадровок в моем проекте. Все написано в коде, но у меня все еще есть 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
}