Удалить ранее опубликованное уведомление
Отправка уведомлений от NSNotificationCenter
на определенное событие нажатия кнопки Следовательно, когда у меня есть быстрые события кнопки Вызывается уведомление, которое много раз приводит ко многим проблемам. Я хочу отменить предыдущее опубликованное уведомление, когда происходят быстрые события. Как это сделать с кодом ниже.
func buttonClick() {
// I want to cancel the previous Event here
NSNotificationCenter.defaultCenter().postNotificationName("Event", object: self)
}
ОБНОВИТЬ:
Позвольте мне четко объяснить, что я хочу, на самом деле у меня есть один метод наблюдателя, когда происходит нажатие кнопки, из которого я хочу опубликовать некоторые уведомления для управления некоторыми элементами пользовательского интерфейса, такими как изменение изображения кнопки. Проблема в том, что когда я быстро нажимаю на кнопку, наблюдателю звонят много раз, а мои уведомления публикуются на одном и том же счетчике, следовательно, пользовательский интерфейс мигает. Я не могу контролировать Наблюдателя в событии нажатия кнопки. У меня есть только контроль над опубликованным событием. с моей стороны.
Любая помощь высоко ценится.
1 ответ
NSNotificationCenter.post()
синхронно Он не возвращается, пока все наблюдатели не выполнили свои действия. Так что нет способа отменить его; нет очереди
Если вы генерируете много уведомлений очень близко друг к другу (особенно в одном цикле цикла выполнения), вы можете объединить их, используя NSNotificationQueue
с enqueueNotification
, Вообще что-то вроде:
NSNotificationQueue.defaultQueue().enqueNotification(note, postingStyle: .whenIdle)
Тем не менее, если это связано с нажатием кнопки (взаимодействие с человеком), то уведомления, вероятно, очень далеко друг от друга с точки зрения компьютера. Полсекунды - это вечность в компьютерном плане. Если это так, то вам, вероятно, лучше сначала управлять этим в пользовательском интерфейсе, отключая кнопку до тех пор, пока вы не захотите принять еще один щелчок (например, с помощью button.enabled = false
).
Можно написать оболочку, которая объединяет операции за любой произвольный период, но в вашем случае это может привести к путанице, поскольку пользователь сможет щелкнуть что-то, что система проигнорирует. Если это все еще то, что вы хотите, я посмотрю, смогу ли я найти пример объединяющегося батута (я написал их в ObjC, но у меня нет примера Swift под рукой).