![](/img/trans.png)
[英]Must call a designated initializer of the superclass 'UITableViewCell'
[英]Must call a designated initializer of the superclass 'UITableViewHeaderFooterView'
我正在努力將我的項目升級到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()
}
}
真正的原因是“UITableViewHeaderFooterView”的內容是
public init(reuseIdentifier: String?)
public init?(coder aDecoder: NSCoder)
但是'UITableViewHeaderFooterView'也從UIView繼承了我需要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
}
所以可能有一些我沒有得到的東西,我正在尋找一些幫助和指導如何解決我的錯誤和理解所有這些混亂。
前段時間我還將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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.