2017-02-22 98 views
2

我正在使用具有自定義單元格的UITableView。每個單元都有自己的nib文件和一個控制器。在一個單元格中,我想讓用戶選擇一個日期。單元格上顯示默認日期。當用戶點擊單元格時,UIPickerView應該在單元格上展開。我在論壇上發現了多個類似的問題,但他們都使用了包含UIPickerView的額外單元格。在我的應用程序中,我需要使用包含標籤和Pickerview的一個nib文件。也許當單擊單元格時,我應該顯示pickerView並更新單元格高度,當單元格再次單擊時,我應該隱藏它並再次更新高度。我在某處看到了一個例子,但它是用Objective-C編寫的。你認爲有可能以這種方式實現它,並且有一個Swift示例嗎?展開TableViewCell而不使用額外的單元格

+0

有辦法做到這一點。告訴我們你到目前爲止試過的東西以及你卡在哪裏。 – arunjos007

+0

最簡單的方法是使用Autolay來定義單元格的高度。這意味着在單元格的內容和本身之間添加約束。然後當你想顯示你的選擇器時,改變一個約束的'constant'屬性,這樣該單元展開顯示選擇器。 – paulvs

回答

3

那麼,要解決這個問題,你只需要在你的單元格視圖中設置標籤和選擇器之間的固定垂直間距。看到這個截圖

fixed vertical spacing

則每次用戶點擊單元格,你只需重新加載表視圖與更新的高度細胞。這裏是源代碼:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

@IBOutlet weak var tableView: UITableView! 

fileprivate var cellExpanded = false 

// MARK: - UITableView datasource & delegate 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "PickerCell")! 

    return cell 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return (cellExpanded) ? 260:44 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    cellExpanded = !cellExpanded 
    tableView.reloadData() 
} 
} 
相關問題