我正在使用一个自定义的 uitableviewcell,它是用 Objective C 编写的(我所有的其他东西都是用 Swift 编写的),目的是让客户轻松使用滑动按钮。我有一个使用这些单元格的表格 View ,我希望它即使在显示其中一个滑动按钮(想想滑动删除按钮)时也能更新。这是我的代码:
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
dispatch_sync(dispatch_get_main_queue()) {
self.tasksTableView.reloadData()
self.tasksTableView.cellForRowAtIndexPath(NSIndexPath(forRow: searchForTaskByName(taskSlices[selectedSlice].name), inSection: 0))!.contentView.addSubview(self.view1)
(self.tasksTableView.cellForRowAtIndexPath(NSIndexPath(forRow: searchForTaskByName(taskSlices[selectedSlice].name), inSection: 0)) as! SESlideTableViewCell).setSlideState(SESlideTableViewCellSlideState.Left, animated: true)
})
})
现在,我添加的 subview 是一个矩形,它最初覆盖单元格,但随着时间的推移缩小(有点像反向加载栏)。第三行是自定义代码的一部分:
[UIView animateWithDuration: 0.0 delay: 0.0 options:UIViewAnimationOptionCurveLinear animations:^{
//code with animation
CGRect frame = snapshotView.frame;
frame.origin.x = targetPositionX;
snapshotView.frame = frame;
m_slideState = slideState;
//[m_leftButtonGroupView layoutIfNeeded];
//[m_rightButtonGroupView layoutIfNeeded];
} completion:^(BOOL finished){
if (finished) {
if (animationId != m_slideAnimationId) {
return;
}
m_slideState = slideState;
if (slideState == SESlideTableViewCellSlideStateCenter) {
m_preparedSlideStates = SESlideStateOptionNone;
isMoved1 = NO;
[self cleanUpSlideView];
}
}
}];
这会移动单元格以保持按钮在 View 中。现在,问题是,tableview 必须重新加载以显示更改(更新 subview ??),这会导致单元格移回起始位置,然后单元格移回按钮显示位置。这会导调用池随机闪烁。我已经尝试过 reloadCellsAtIndexPaths,同样的交易。我试图隐藏和取消隐藏动画;使用不同的线程; dispatch_sync 和 dispatch_async;从 super View 中删除表,更新并放回原处; UIView.animationsSetEnable(false) block ; deleteCellsAtIndexPaths 和 insertCellsAtIndexPaths,没有任何作用。这可在我的 iPhone 5 和模拟器上重现。
我真正需要的是弄清楚 reloadData 做了什么,这样我就可以只调用我需要的部分,并且希望不要对任何东西进行动画处理。我使用的所有动画都有时间 0.0 并且没有延迟。我在后台运行一个小的向上计数算法,如果这很重要的话,它每 .01 秒可变++ 一次。感谢您能给我的任何帮助,我已经为此工作了两天(我对 iOS 开发还很陌生,我想在提问之前先做研究)。
最佳答案
dispatch_sync(dispatch_get_main_queue()) { }
是您问题的根源,将其更改为 dispatch_async(dispatch_get_main_queue()) {//重新加载 TableView }
和您的好去
关于swift - 无论我如何重新加载 UITableViewCell,它总是随机闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32081512/