CollectionView单元格意外行为迅速

时间:2019-02-10 12:39:57

标签: ios swift uicollectionview

我的单元格是根据-- 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

1 个答案:

答案 0 :(得分:1)

发现了问题。由于CreateMinimalBST正在设置默认单元格,因此我在else中的if语句之后取消了cellForItemAt语句。 现在一切都按预期工作。 最终功能是:

prepareForReuse