Вопрос

Я отключил взаимодействие в своем основном представлении (которое содержит некоторые подпредставления, которые я использую в качестве кнопок).

Я держу это отключенным, пока у меня есть вторичное представление, показывающее сетевую активность (загрузка данных).Когда все будет готово, я снова включу взаимодействие в основном представлении.

Это сделано для того, чтобы пользователь не нажимал эти кнопки во время работы сети.

В любом случае, все кажется хорошо, но если пользователь начинает нажимать кнопки в основном представлении, как только происходит повторное включение, эти события касания (за последние несколько секунд) фактически срабатывают.Не прикосновения-начались, которые подсвечивают кнопки, а функции, вызываемые прикосновениями-закончились.Как будто он стоял в очереди все время, пока был отключен, и «гоняется, чтобы наверстать упущенное».

Это очень странно, почему события касания ставятся в очередь, если в представлении отключено взаимодействие с пользователем?

Это было полезно?

Решение

Трудно быть уверенным в ответе, не видя кода, но вот одна идея:

Если ваша сетевая активность синхронна, то есть блокируется, то может случиться так, что касания пользователя будут поставлены в очередь, прежде чем они получат возможность выполнить какой-либо ваш код.Если это так, то эти касания не будут отправлены в вашу цепочку ответчиков до тех пор, пока не завершится сетевая активность, и у них никогда не будет возможности «узнать», что вы отключили взаимодействие с этими элементами управления.

Вот один из способов помочь вам разобраться в вашей ситуации:Добавьте немного отладки NSLog утверждения на верхнем уровне (то, что вы называете вторичным представлением), которые указывают на сетевую активность.Убедитесь, что фрейм вторичного представления достаточно велик, чтобы вместить эти касания, и посмотрите, регистрирует ли он касания, как только они происходят.Если нет, то мое предположение может быть верным.Если да, то вы все равно получаете полезную информацию — и, возможно, вы сможете просто фиксировать касания на этом уровне, вместо того, чтобы оставлять их в очереди.

Если это предположение верно, то наименее хакерское решение, которое я могу придумать, — это сделать ваши сетевые операции асинхронными.

Если вы не хотите этого делать, вы также можете попробовать использовать NSTimer оставить индикатор сетевой активности включенным на долю секунды после завершения синхронного вызова.Таким образом, ваша цепочка ответчиков сможет очистить очередь входящих касаний и игнорировать их, если это желаемое поведение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top