2017-06-24 68 views
0

我想在iOS中使用swift將UIControls添加到靜態TableViewHeaders中。目標是建立在默認外觀的基礎之上,因此UI將與未來的默認UI元素相匹配。使用Swift將按鈕添加到靜態TableView頭

我發現了modifying the appearance of existing elements的一個很好的例子,但是沒有添加新的例子。

我的具體目標是:

  1. 「全選」功能,以快速標記的部分爲「選中」的所有行(可能是一個對號配件,UISwitch等)
  2. 「顯示/隱藏「功能允許單個視圖按部分提供簡單的」概覽「,同時仍可顯示部分內部的詳細信息。

由於這兩個都與章節分組相關,所以標題是添加此功能的合理選擇。

回答

1

有自定義靜態標頭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

找到(是回答我的問題,希望爲浸出年後回來給的東西)

相關問題