Мой проект отображает элементы в табличном представлении. Когда пользователь щелкает ячейку, ячейка расширяется, чтобы показать больше информации (например, вкладка обновлений App Store), и если пользователь нажимает эту расширенную ячейку, элемент, указанный в ячейке, открывается на новой странице (опять же, как в App Store). ). Однако этот элемент должен быть загружен с использованием запроса Alamofire, прежде чем его можно будет отобразить. Чтобы ускорить процесс, я начинаю загрузку элемента, когда ячейка расширяется, поэтому, когда пользователь решит открыть элемент, возможно, он уже завершил загрузку.
Однако в этом и заключается моя проблема: некоторые элементы загружаются быстро, поэтому они, скорее всего, загружаются, когда пользователь открывает элемент (второе нажатие). Однако некоторые элементы намного больше и требуют больше времени для загрузки (до 6 секунд). Как мне обрабатывать пользовательский ввод, если элемент еще не закончил загрузку и, более того, как мне это реализовать?
Самый простой способ — полностью игнорировать пользовательский ввод, проверяя, загружается ли элемент при каждом нажатии, чтобы запустить переход. Однако неправильно игнорировать пользователя, и ему приходится нажимать более одного раза с одним и тем же намерением. Точно так же я использовал dispatch_group_wait()
в основном потоке, но это еще хуже, потому что он блокирует все входные данные.
Я хотел бы добиться следующего:
- Первое нажатие: начать запрос на загрузку и сохранить его в переменной (это уже сделано). Я не хочу запускать переход в
completionHandler
запроса, потому что мы еще не знаем, будет ли Второй тап:
а. Если элемент загружен, запустите переход, чтобы открыть его.
б. Если элемент еще не закончил загрузку, отложите запуск перехода до конца загрузки.
Я знаю, что этот вопрос очень большой, поэтому, чтобы сузить его: возможно ли реализовать вышеупомянутую логику? Как?