重新加载表格视图单元格时表格视图单元闪烁

时间:2019-09-19 09:52:57

标签: ios uikit bluetooth-lowenergy swift5

表视图单元在重新加载单个单元时闪烁。我想在BLE回调到来时重新加载表视图单元格。这按预期工作。但是,如果滚动并按住表格视图,则该时间视图单元会闪烁。

在相同的情况下,我尝试了不进行BLE扫描的静态数据,我每秒都在运行计时器并重新加载表单元格,但此时单元格没有闪烁。滚动并按住表格视图时,我观察到计时器正在停止,直到释放表格视图为止。

但是在BLE场景中,如果滚动并按住,则BLE回调也会连续出现。

请帮助我处理BLE回调情况,以防止滚动时保持表格视图单元格闪烁并保持表格视图。

reloadTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(reloadTableViewCells), userInfo: nil, repeats: true)

@objc func reloadTableViewCells(_ name: String) {
    if let index = myArray.firstIndex(where: {name == $0}) {
          self.myArray[index] = name
          self.tableViewRx.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
    } else {
         myArray.append(name)
         self.reloadTableView()
    }
}
func scanForBLEDevices() {
    scanBleDevices(allowDuplicates: true, peripheralUUIDString: nil, callback: reloadTableViewCellsOnBleScan)
reloadTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(reloadTableViewCells), userInfo: nil, repeats: true)
}

@objc func reloadTableViewCellsOnBleScan(_ name: String) {
    if let index = myArray.firstIndex(where: {name == $0}) {
          self.myArray[index] = name
          self.tableViewRx.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
    } else {
         myArray.append(name)
         self.reloadTableView()
    }
}

预期结果是,滚动并按住表格视图时,表格视图单元格应停止闪烁。

0 个答案:

没有答案