【发布时间】:2020-08-04 00:09:46
【问题描述】:
我想摆脱项目中的情节提要。一切都是用代码编写的,但我仍然有 UIViewController(s) 作为参考。
当尝试呈现 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)
}
但是,删除对 Storyboard 的引用并使用下面显示的方法,我收到错误,例如对于本示例“'ProductViewController' 类型的值没有成员'属性'”和“'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
}
【问题讨论】:
标签: swift uiviewcontroller initialization