我试图像这张图片一样制作一个桌面视图(1)。当表格查看单元格的文本得到"取消计划"或"关闭日"按钮">"将是灰色的,单元格无法点击。
我的代码是有效的,但是当我向下滚动并返回时,设置会变得混乱。设置将随机改变,如图像(2)和(3)。为什么呢?
图片(1):https://www.dropbox.com/s/0k6ldrfx5nzyt9e/1.jpg?dl=0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "rosterId", for: indexPath) as! RosterCell
...
if jobCancel[indexPath.section] == 0{
cell.separator.backgroundColor = UIColor.darkGray
cell.jobDetail.textColor = UIColor.gray
cell.button.isEnabled = false
cell.button.alpha = 0.3;
}
if cell.jobDetail.text == "Cancelled Schedule"{
cell.separator.backgroundColor = UIColor.red
cell.button.isEnabled = false
cell.button.alpha = 0.3;
cell.isUserInteractionEnabled = false
}
if cell.jobDetail.text == "Off Day"{
cell.separator.backgroundColor = UIColor.darkGray
cell.button.isEnabled = false
cell.button.alpha = 0.3;
cell.isUserInteractionEnabled = false
}
}
像image(2)或image(3)
图片(2):https://www.dropbox.com/s/jmile0vxpcqgt92/2.jpg?dl=0
image(3):https://www.dropbox.com/s/94ef4hb996afmm6/3.jpg?dl=0
答案 0 :(得分:0)
这意味着已经以某种方式设置样式的单元格可以重复使用以显示不同的数据。每次重复使用单元格时,您必须确保设置样式的每个方面,以避免交叉。
如果您使用configureCell
方法来处理它,可能更容易跟踪样式,这样您就可以忘记设置一个值,甚至可以设置一些默认值值。强>
func configureCell(cell:RosterCell,
textColour:UIColor,
seperatorColour:UIColor,
buttonEnabled:Bool,
buttonAlpha:CGFloat,
interactionEnabled:Bool = false) {
cell.separator.backgroundColor = seperatorColour
cell.jobDetail.textColor = textColour
cell.button.isEnabled = buttonEnabled
cell.button.alpha = buttonAlpha
cell.isUserInteractionEnabled = interactionEnabled
}
然后您的cellForRowAt
方法看起来像这样
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "rosterId", for: indexPath) as! RosterCell
...
if jobCancel[indexPath.section] == 0{
configureCell(cell: cell,
textColour: UIColor.gray,
seperatorColour: UIColor.darkGray,
buttonEnabled: false,
buttonAlpha: 0.3,
interactionEnabled: true)
}
if cell.jobDetail.text == "Cancelled Schedule"{
configureCell(cell: cell,
textColour: UIColor.gray,
seperatorColour: UIColor.red,
buttonEnabled: false,
buttonAlpha: 0.3)
}
if cell.jobDetail.text == "Off Day"{
configureCell(cell: cell,
textColour: UIColor.gray,
seperatorColour: UIColor.darkGray,
buttonEnabled: false,
buttonAlpha: 0.3)
}
}
正如您所看到的,我已将interactionEnabled
参数设置为默认为false
,因此我无需为最后两个if语句设置它。