【问题标题】:What is the proper way to initialize a UIViewController using Swift when not using Storyboards?不使用 Storyboard 时,使用 Swift 初始化 UIViewController 的正确方法是什么?
【发布时间】: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


    【解决方案1】:

    我只看到这个:

    • 使用情节提要,目的地是 AttributeOptionsViewController 类型
    • 没有,目的地是 ProductionViewController 类型

    这可能是一个原因

    【讨论】:

      猜你喜欢
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2023-03-12
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多