当前位置:  开发笔记 > IOS > 正文

必须调用超类'UITableViewHeaderFooterView'的指定初始化程序

如何解决《必须调用超类'UITableViewHeaderFooterView'的指定初始化程序》经验,为你挑选了1个好方法。

我正在将我的项目升级到Swift2,但遇到了两个错误,我真的不知道为什么以前没有这些错误。

第一个是 “ Initializer不会从其超类覆盖指定的初始化器”

第二个是 “必须调用超类'UITableViewHeaderFooterView'的指定初始化程序”

这是我班上的代码:

import UIKit
    @IBDesignable
    class CardShadowTableViewHeaderFooterView: UITableViewHeaderFooterView {

        // MARK: - Public

        override init(frame: CGRect) { <-- First error
            super.init(frame: frame)   <-- Second error
            self.applyCardShadowStyle()
        }

        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            self.applyCardShadowStyle()
        }

        // MARK: - Overrides

        override func layoutSubviews() {
            super.layoutSubviews()
            self.updateCardShadowPath()
        }

    }

所以为什么我从第一个错误中了解到,我试图覆盖'UITableViewHeaderFooterView'的错误初始化

对于第二个,我试图调用“ UITableViewHeaderFooterView”的不存在的init

确实是因为'UITableViewHeaderFooterView'的初始化是

public init(reuseIdentifier: String?)
public init?(coder aDecoder: NSCoder)

但是'UITableViewHeaderFooterView'也从UIView继承了我需要的init public init(frame: CGRect)

这是我在TableViewController中用于创建标题的代码。

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerShadowView = CardShadowTableViewHeaderFooterView(frame: CGRectMake(0,0,320,45))

        return headerShadowView
    }

因此,可能有些事情我没有得到,我正在寻找有关如何纠正错误和理解所有这些混乱的帮助和指导。



1> Hong Wei..:

不久前,我还将obj-c代码库升级到swift2并遇到了相同的问题。

我最终所做的是:

在我的自定义UITableViewHeaderFooterView子类中,我覆盖了初始化程序。

override init(reuseIdentifier: String?) {
    super.init(reuseIdentifier: reuseIdentifier)
    commonInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    commonInit()
}

func commonInit() {
//initialize my subviews
}

然后在viewDidLoadTableViewController的方法中,注册子类:

tableView.registerClass(CustomHeaderFooterView.self,forHeaderFooterViewReuseIdentifier: "CustomHeaderFooterView")

最后,在tableView:viewForHeaderInSection:方法中:

let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CustomHeaderFooterView") as! CustomHeaderFooterView

//do something with headerView

return headerView

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有