我的项目在表格视图中显示元素。当用户单击一个单元格时,单元格将展开以显示更多信息(如App Store更新选项卡),如果用户点击该扩展单元格,则单元格中引用的元素将在新页面中打开(同样,如App Store )。然而,必须先使用Alamofire请求下载该元素,然后才能显示。为了加快速度,我在单元格扩展时开始下载元素,所以当用户决定打开元素时,它可能已经完成了下载。
然而,这就是我的问题:一些元素快速下载,因此很可能在用户打开元素时下载(第二次点击)。但是有些元素要大得多,下载时间也要长(最多6秒)。如果元素尚未完成下载,我应该如何处理用户输入,此外,我应该如何实现它呢?
最简单的方法是完全忽略用户输入,检查元素是否已随每次点击下载以启动segue。然而,忽略用户并且他们必须以相同的意图多次点击是错误的。同样,我在主线程上使用了dispatch_group_wait()
,但它更糟糕,因为它会阻止所有输入。
我想要实现的目标如下:
completionHandler
中启动segue,因为我们还不知道第二次点按:
一个。如果元素已下载,请启动segue以将其打开。
湾如果元素尚未完成下载,请将segue的启动推迟到下载结束。
我知道这个问题非常大,所以要缩小范围:是否有可能实现上述逻辑?怎么样?
答案 0 :(得分:1)
您可以使用shouldPerformSegueWithIdentifier:
功能取消segue。
实现此功能,如果项目尚未下载,则使用它取消segue,并设置下载完成处理程序可以检查的标志。
下载完成后,如果设置了标志,则完成处理程序可以执行segue。
您可能还应该显示某种活动指示符,以便用户知道数据正在加载