簡體   English   中英

必須調用超類'UITableViewHeaderFooterView'的指定初始值設定項

[英]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'的錯誤初始化
  • 而對於第二個我試圖調用不存在的'UITableViewHeaderFooterView'的初始化

真正的原因是“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM