簡體   English   中英

為不同的 TableViews 創建可重用的 FooterView (Swift 5)

[英]Creating reusable FooterView for different TableViews (Swift 5)

我創建了 class FooterView:UIView。 我用它為我的 TableView 創建 FooterView。 但我也想重用這個 class 在我的其他 TableView 中創建 FooterView。 當我嘗試向 setupElements () function 添加參數以在那里傳遞所需的 TableView 並根據它更改 Label 文本時,但初始化程序不允許我這樣做。 我怎樣才能做到這一點? 此外,Swift 不允許我直接調用 setupElements () function,即使我刪除了“私有”。 我的代碼:

class FooterView: UIView { 
    private var footerLabel: UILabel = {
        ...
    }()

    private func setupElements() {
        addSubview(footerLabel)
        ...
        footerLabel.text = "Table is empty"
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupElements()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
...
class TableViewController: UIViewController {
   private lazy var footerView = FooterView()
   private var array: [String] = []

   func viewDidLoad() {
      super.viewDidLoad()
      setupTableView()
   }

   private func setupTableView() {
      tableView.register(UINib(nibName: "Cell", bundle: nil), forCellReuseIdentifier: LibraryCell.reuseId)
      if array.count == 0 {
         tableView.tableFooterView = footerView
      }
   }
}

extension TableViewController: UITableViewDelegate, UITableViewDataSource {...}

經過大量搜索,我解決了我的問題。 我刪除了初始化並通過 setupFooterView function(對於 vc:UIViewController)創建了一個 FooterView,我將需要的 ViewController 作為參數傳遞到其中。 代碼如下所示:

class FooterView: UIView {
    private var footerLabel: UILabel = {
        let label = UILabel()
        ...
        return label
    }()

    func setupFooterView(for vc: UIViewController) -> UIView {
        let footerView = UIView()
        footerView.addSubview(footerLabel)
        ...
        if vc is TableViewController {
        footerLabel.text = "..."
        } else if vc is SecondTableViewController {
            footerLabel.text = "..."
        }
        return footerView
    }
}

將 FooterView 添加到我需要的 ViewController 中:

...
private lazy var footerView = FooterView()
...
tableView.tableFooterView = footerView.setupFooterView(for: self)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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