在不使用额外单元格的情况下展开 TableViewCell
Expand TableViewCell without using an extra cell
我正在使用带有自定义单元格的 UITableView
。每个单元都有自己的 nib 文件和一个控制器。在一个单元格中,我想让用户 select 约会。默认日期显示在单元格上。当用户单击单元格时,UIPickerView
应该在单元格上展开。我在论坛上发现了多个类似的问题,但它们都使用了一个包含 UIPickerView
的额外单元格。在我的应用程序中,我需要使用一个包含标签和 Pickerview 的 nib 文件。也许当单击单元格时,我应该显示 pickerView 并更新单元格高度,当再次单击单元格时,我应该隐藏它并再次更新高度。我在某处看到了一个示例,但它是用 Objective-C 编写的。您认为可以通过这种方式实现吗?是否有 Swift 示例?
好吧,要解决该问题,您只需在单元格视图中设置标签和选择器之间的固定垂直间距。看这张截图
然后,每次用户点击单元格时,您只需重新加载 table 具有更新的单元格高度的视图。这是源代码:
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()
}
}
我正在使用带有自定义单元格的 UITableView
。每个单元都有自己的 nib 文件和一个控制器。在一个单元格中,我想让用户 select 约会。默认日期显示在单元格上。当用户单击单元格时,UIPickerView
应该在单元格上展开。我在论坛上发现了多个类似的问题,但它们都使用了一个包含 UIPickerView
的额外单元格。在我的应用程序中,我需要使用一个包含标签和 Pickerview 的 nib 文件。也许当单击单元格时,我应该显示 pickerView 并更新单元格高度,当再次单击单元格时,我应该隐藏它并再次更新高度。我在某处看到了一个示例,但它是用 Objective-C 编写的。您认为可以通过这种方式实现吗?是否有 Swift 示例?
好吧,要解决该问题,您只需在单元格视图中设置标签和选择器之间的固定垂直间距。看这张截图
然后,每次用户点击单元格时,您只需重新加载 table 具有更新的单元格高度的视图。这是源代码:
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()
}
}