不使用额外的单元格展开TableViewCell

时间:2017-02-22 16:00:42

标签: ios swift uitableview uipickerview custom-cell

我正在使用UITableView自定义单元格。每个单元格都有自己的nib文件和控制器。在一个单元格中,我想让用户选择日期。单元格上显示默认日期。当用户点击单元格时,UIPickerView应在单元格上展开。我在论坛上发现了多个类似的问题,但所有问题都使用了包含UIPickerView的额外单元格。在我的应用程序中,我需要使用一个包含标签和Pickerview的nib文件。也许当单击单元格时,我应该显示pickerView并更新单元格高度,当再次单击单元格时,我应该隐藏它并再次更新高度。我在某个地方看到了一个例子,但它是用Objective-C编写的。您是否认为以这种方式实现它并且是否有Swift示例?

1 个答案:

答案 0 :(得分: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()
}
}