【发布时间】:2018-12-14 21:52:43
【问题描述】:
我正在尝试使用分段控件和开关隐藏或显示 tableviewcontroller 单元格。下面的代码不起作用,只有在我触摸单元格内部时才会打印。我相信触摸会导致表格重新加载。
代码:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
switch(profileSegment.selectedSegmentIndex) {
case 0:
print("Seg Change")
if cell == self.reviewsCell {
return 0
}
tableView.reload()
break
case 1:
print("Seg Change")
if cell == self.watchCell {
return 0
}
if cell == self.watchedCell {
return 0
}
if cell == self.reviewsCell {
return 500
}
tableView.reload()
break
default:
break
}
return super.tableView(tableView, heightForRowAt: indexPath)
}
为什么切换时tableview没有重新加载?除了将大小更改为 0 之外,还有更有效的方法来实现这一点吗?
更新:
我尝试了另一条路线并取得了部分成功。该开关有效,但只会使单元格显示为空白。什么会使细胞完全消失?
代码:
func segChange(sender: UISegmentedControl) {
switch(profileSegment.selectedSegmentIndex) {
case 0:
self.reviewCell.isHidden = true
self.cell.isHidden = false
tableView.reloadData()
break
case 1:
self.reviewCell.isHidden = false
self.cell.isHidden = true
tableView.reloadData()
break
default:
break
}
}
更新 2:如果我使用下面的代码,tableView 将在我第一次选择新的段索引时更改单元格,但段控件不会更改并且变得无响应。为什么该部分会以这种方式响应?如果我解决了这个问题,问题就会得到解决。
@objc func segChange() {
tableView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
profileSegment.addTarget(self, action: #selector(segChange), for: .valueChanged)
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = super.tableView(tableView, cellForRowAt: indexPath)
switch(profileSegment.selectedSegmentIndex) {
case 0:
if cell == self.reviewsCell {
return 0
}
break
case 1:
if cell == self.watchCell {
return 0
}
if cell == self.watchedCell {
return 0
}
if cell == self.reviewsCell {
return 500
}
break
default:
break
}
return super.tableView(tableView, heightForRowAt: indexPath)
}
【问题讨论】:
-
您使用静态单元格让自己的生活变得困难。使用动态模型会容易得多,并且只显示您需要的单元格
-
我正在使用仅适用于静态单元格的容器视图。
-
您可以设法在表格视图中使用容器视图。参见例如stackoverflow.com/a/38673948/1852207。但是你真的需要一个容器还是只需要一个可重复使用的电池?后者更容易、更轻量
标签: ios swift uitableview uisegmentedcontrol