Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无论我如何重新加载UITableViewCell,它总是随机闪烁_Swift_Uitableview_Reloaddata - Fatal编程技术网

Swift 无论我如何重新加载UITableViewCell,它总是随机闪烁

Swift 无论我如何重新加载UITableViewCell,它总是随机闪烁,swift,uitableview,reloaddata,Swift,Uitableview,Reloaddata,我正在使用一个定制的uitableviewcell,它是用Objective C编写的(我所有的其他内容都是用Swift编写的),目的是方便客户使用滑动按钮。我有一个使用这些单元格的tableview,我希望它即使在其中一个幻灯片按钮(想想幻灯片删除按钮)显示时也能更新。这是我的代码: dispatch_async(dispatch_get_global_queue(priority, 0)) { // do some task d

我正在使用一个定制的uitableviewcell,它是用Objective C编写的(我所有的其他内容都是用Swift编写的),目的是方便客户使用滑动按钮。我有一个使用这些单元格的tableview,我希望它即使在其中一个幻灯片按钮(想想幻灯片删除按钮)显示时也能更新。这是我的代码:

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)
    })
    })
现在,我添加的子视图是一个最初覆盖单元格的矩形,但随着时间的推移会缩小(有点像反向加载条)。第三行是自定义代码的一部分:

    [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];
        }
    }
}];
这将移动单元格以保持按钮在视图中。现在,问题是,tableview必须重新加载以显示更改(更新子视图??),这会导致单元格移回起始位置,然后单元格移回按钮显示位置。这会导致细胞随机闪烁。我已经尝试过重新加载Cellsatindexpaths,同样的交易。我试图隐藏和取消隐藏周围的动画;使用不同的线程;调度同步和调度异步;从superview中删除表、更新和放回;UIView.animationSetEnable(false)块;删除cellsatindexpaths和insertCellsAtIndexPaths,没有任何效果。这在我的iPhone 5和模拟器上是可以复制的


我真正需要的是弄清楚重载数据的作用是什么,这样我就可以只调用我需要的部分,并且希望不要设置任何动画。我所有使用的动画都有时间0.0,没有延迟。我正在后台运行一个小的向上计数算法,它是变量+,每.01秒运行一次,如果这很重要的话。谢谢你能给我的任何帮助,我已经在这方面工作了两天了(我对iOS开发相当陌生,我想在提问之前做一下研究)。

好吧,我找到了一个非常棘手的解决方案。我创建了一个重复的UITableView,并将其放在主视图下。我将主视图设置为从superview中删除,然后在这两个调用之间重新加载数据调用和其他更新。这将在一瞬间显示第二个tableview,然后在第一次更新后0.5秒,我将更新第二个tableview以保持其最新状态。这确实有效。我不敢相信它能起作用,我为它的必要性感到震惊。我仍然在寻找合法的解决方案,因此我暂时不会接受我的答案,以防有人能帮我解决问题。

dispatch\u sync(dispatch\u get\u main\u queue()){}
是问题的根源将其更改为
dispatch\u async(dispatch\u get\u main\u queue()){//reload table view}
你的好心情

[self.tableView registerNib:[UINib nibWithNibName:@"CellXibName" bundle:nil] forCellReuseIdentifier:CELL_IDENTIFIER];
我有闪存的问题。我终于发现,当表格重新加载时,单元格不能重用。
我有一些查询块,当我设置每个单元格时,该单元格总是使其闪烁

我找到了这条线,但我不知道如何应用它,有人能帮忙吗?我刚试过这个;仍然会随机出现口吃闪光。谢谢你。