有自定義靜態標頭TableViews兩個主要選項:
willDisplayHeaderView提供了默認的視圖,並允許它修改。簡單的外觀修改相當簡單。添加按鈕等交互功能有點複雜
viewForHeaderInSection返回標題的視圖,該標題可以從nib加載或完全由代碼創建。這樣做的一個缺點是它不能訪問標題的默認外觀,並且Apple僅提供對一個默認(UIColor.groupTableViewBackground)的訪問。
要在默認標題之上構建,需要使用willDisplayHeaderView。
override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int)
{
let header = view as! UITableViewHeaderFooterView
let headerLabelFont: UIFont = header.textLabel!.font
// References for existing or new button
var selectButton: UIButton? = nil
// Check for existing button
for i in 0..<view.subviews.count {
if view.subviews[i] is UIButton {
selectButton = view.subviews[i] as? UIButton
}
}
// No button exist, create new one
if selectButton == nil {
selectButton = UIButton(type: .system)
header.addSubview(selectButton!)
toggleButton = UIButton(type: .system)
header.addSubview(toggleButton!)
}
// Configure button
selectButton?.frame = CGRect(x: view.frame.size.width - 85, y: view.frame.size.height - 28, width: 77, height: 26)
selectButton?.tag = section
selectButton?.setTitle("SELECT ALL", for: .normal)
selectButton?.titleLabel?.font = UIFont(descriptor: headerLabelFont.fontDescriptor, size: 11)
selectButton?.contentHorizontalAlignment = .right;
selectButton?.setTitleColor(self.view.tintColor, for: .normal)
selectButton?.addTarget(self, action: #selector(self.selectAllInSection), for: .touchUpInside)
}
func selectAllInSection() {
...
的最大挑戰是努力迴避的事實,靜態頭細胞可以通過TableView中重複使用。因此,如果修改了一個,例如添加一個按鈕,那麼當它被重用時,可以添加第二個按鈕。這只是一個問題,如果TableView的大小足以滾動屏幕,但應該防範,因爲結果可能很難追查。
如果將多個按鈕添加到標題,則需要一些標識每個按鈕的機制。 UIButton.tag是一個選項,但在此示例中,該字段用於標識要執行的部分。另一種選擇是使用標籤字符串來包含兩條信息。
一個完整的工作演示可以Github
找到(是回答我的問題,希望爲浸出年後回來給的東西)