【问题标题】:What to use as NSCoder to initialize a View?使用什么作为 NSCoder 来初始化视图?
【发布时间】:2021-07-26 20:17:02
【问题描述】:

大家好,我创建了一个新的自定义视图类,现在我想构建它的一个实例,我使用以下代码对其进行了初始化:

required init?(coder aCoder: NSCoder) {
        super.init(coder: aCoder)
           tapRecognizer = UITapGestureRecognizer(
                           target: self, action: #selector(handleBarTap))
           addGestureRecognizer(tapRecognizer)
       }

       deinit {
           removeGestureRecognizer(tapRecognizer)
       }

这就是实例,但我可以用什么作为编码器?

lazy var chartView = TutorialChartView(coder: )

提前致谢!

【问题讨论】:

    标签: swift nscoder


    【解决方案1】:

    当你说 View 时,你是指 UIView 吗?问题是那是错误的初始化程序。 init(coder:) 不是你叫的东西;当情节提要中有这些东西之一并且您加载该视图控制器时,情节提要启动的过程。

    代码UIView指定的初始化器是init(frame:)。实现它并调用它,一切就绪。

    (您可能必须提供init(coder:)的实现,但它应该只抛出fatalError,因为您不希望以这种方式调用。)

    【讨论】:

      【解决方案2】:

      你不应该使用coder作为创建类的初始化器,而是使用框架,这是你用框架式初始化编写的代码。

          override init(frame: CGRect) {
          super.init(frame: frame)
          tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleBarTap))
          addGestureRecognizer(tapRecognizer)
      }
      
          required init?(coder: NSCoder) {
          fatalError("init(coder:) has not been implemented")
      }
      

      这是你如何使用它:

       lazy var chartView = TutorialChartView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)
      

      【讨论】:

        猜你喜欢
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        相关资源
        最近更新 更多