2017-02-20 4 views
0

Публикация уведомлений с NSNotificationCenter на определенное событие нажатия кнопки. Следовательно, когда у меня есть события быстрой кнопки. Уведомление вызывается, что много раз приводит к множеству проблем. Я хочу отменить предыдущее уведомление, когда происходят быстрые события. Как сделать код ниже.Удалить ранее размещенное уведомление

func buttonClick() {  
// I want to cancel the previous Event here 
NSNotificationCenter.defaultCenter().postNotificationName("Event", object: self) 
} 

UPDATE:

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

Любая помощь очень ценится.

+0

Где вы добавляете своего наблюдателя nofication? – Matt

+0

@Matt некоторые другие классы, основанные на том, что я выполняю некоторую операцию, как изменение изображения кнопки. – Vishnuvardhan

+0

Вы не должны публиковать уведомление, если оно уже опубликовано – Matt

ответ

1

NSNotificationCenter.post() является синхронным. Он не возвращается, пока все наблюдатели не выполнили свои действия. Таким образом, нет возможности отменить его; нет очереди.

Если вы генерируете множество уведомлений очень близко друг к другу (особенно в пределах одного цикла цикла цикла), вы можете объединить их с помощью NSNotificationQueue с enqueueNotification. Вообще-то вроде:

NSNotificationQueue.defaultQueue().enqueNotification(note, postingStyle: .whenIdle) 

Это сказало, если это связано с нажатием кнопки (а человеческое взаимодействие), то уведомления, вероятно, очень далеко друг от друга в компьютерных терминах. Полсекунды - это вечность в компьютерных терминах. Если это так, вы, вероятно, лучше управляете этим первым в пользовательском интерфейсе, отключив кнопку, пока не захотите принять другой щелчок (например, с button.enabled = false).

Можно написать оболочку, которая объединяет операции над любым произвольным периодом, но это может сбить с толку в вашем случае, поскольку пользователь сможет щелкнуть что-то, что система будет игнорировать. Если это все равно, что вы хотите, я посмотрю, смогу ли я найти пример коалесцирующего батута (я написал их в ObjC, но у меня нет примера Swift).

+0

Лучший подход. OP должен помешать этому в пользовательском интерфейсе. –