我的单元格是根据-- removing last separator
WITH cte AS (
SELECT STRING_AGG(c+(CASE WHEN i%2=0 THEN ' OR ' ELSE ' AND ' END), '')
WITHIN GROUP (ORDER BY i)AS r
FROM t
)
SELECT r, REPLACE(REPLACE(r+'$', ' OR $', ''), ' AND $', '') AS r
,STUFF(r,
LEN(r)-CHARINDEX(' ', REVERSE(TRIM(r)))+1,
CHARINDEX(' ', REVERSE(TRIM(r)))+1,
'') AS r
FROM cte;
创建的,它以30分钟为增量保存所有开放时间段,但是根据其ID是否等于任何timeSlotArray
条目ID来获取其颜色。
如果我选择预订的日期,它将为单元格提供正确的颜色,但是即使我更改其他预订的日期,单元格也会在重新加载数据时保持该颜色。
函数是:
bookedTimeSlotsArray
我在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeSlotCell", for: indexPath) as! TimeSlotCollectionViewCell
// Configure the cell
cell.timeLabel.text = timeSlotArray[indexPath.row]
cell.cellId = Int("\(String(describing: self.selectedDate))" + self.timeStringToStringConvert(timeSlotArray[indexPath.row]))
if bookedTimeSlotsArray.count > 0 {
for index in 0...bookedTimeSlotsArray.count - 1 {
let bookingId = bookedTimeSlotsArray[index].bookingId
if cell.cellId == bookingId {
print(" match found")
print("Index is: \(index)")
print("cell time is: \(timeSlotArray[indexPath.row])")
print("time slot cell id is: \(String(describing: cell.cellId))")
print("booking id: \(bookingId)")
cell.backgroundColor = UIColor.red.withAlphaComponent(0.3)
} else {
cell.backgroundColor = UIColor.green.withAlphaComponent(0.8)
}
}
}
return cell
}
和calculateOpenTimeSlots()
这两个函数中重新加载了集合视图数据,它们的调用方式如下:
第一种情况:在calculateBookedTimeSlots()
中,我调用了两个函数,
第2种情况:在viewDidLoad()
观察者函数中,我仅调用Firebase
,第3种情况:在从选择表视图单元格更改日期的情况下,我仅在calculateBookedTimeSlots()
中调用calculateOpenTimeSlots()
。
第一种和第三种情况按预期工作,但第二种情况与问题开头所描述的不同。你们能看到我撞墙的地方吗?
和往常一样非常感谢。
编辑:
我在单元格的类中添加了didSelectRowAt
,但是当集合视图绘制单元格时,我仍然得到相同的行为。
这是单元格类:
prepareForReuse
答案 0 :(得分:1)
发现了问题。由于CreateMinimalBST
正在设置默认单元格,因此我在else
中的if
语句之后取消了cellForItemAt
语句。
现在一切都按预期工作。
最终功能是:
prepareForReuse