我正在努力将我的项目升级到Swift2,我有两个错误,我不知道为什么我以前没有这些错误。
第一个是"初始化程序不会覆盖超类中的指定初始化程序"
第二个是"必须调用超类的指定初始化程序' 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()
}
}
真正导致&#39; UITableViewHeaderFooterView&#39;是
public init(reuseIdentifier: String?)
public init?(coder aDecoder: NSCoder)
但是&#39; UITableViewHeaderFooterView&#39;还使用我需要的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
}
所以可能有一些我无法获得的东西,我正在寻找一些关于如何解决我的错误并理解所有这些混乱的帮助和指导。
答案 0 :(得分:4)
前段时间我还将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
}
然后在TableViewController的viewDidLoad
方法中,我注册了子类:
tableView.registerClass(CustomHeaderFooterView.self,forHeaderFooterViewReuseIdentifier: "CustomHeaderFooterView")
最后,在tableView:viewForHeaderInSection:
方法:
let headerView = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CustomHeaderFooterView") as! CustomHeaderFooterView
//do something with headerView
return headerView