Подтвердить что ты не робот

UIButton AddTarget несколько раз при одном и том же целевом действии вызывает только один раз?

Это просто быстрый вопрос, в основном то, что я заметил и довольно смущенный. Я играл с addTarget в прошлом и заметил, что если вы вызываете addTarget динамически и дважды устанавливаете одно и то же действие/действие, нажмите кнопку - с помощью метода addTarget. Даже если мы "добавили" цель и действие более одного раза, независимо от того, что они являются одной и той же целью и действием, само действие вызывается только один раз.

Итак, мой вопрос - добавляет addTarget игнорировать добавление другой цели себе, если она уже существует в стеке цели/действия?

4b9b3361

Ответ 1

UIButton - это объект UIControl, который следует за шаблоном event-listener, который часто реализуется с помощью хэш-карты (NSDictionary в Objective-C) целей (например, Listeners или Observers). Поскольку цель добавляется в качестве ключа, она не может быть добавлена ​​более одного раза.

Документация для addTarget:action:forControlEvents: of UIControl описывает это поведение как функцию безопасности:

Также безопасно вызывать этот метод несколько раз с теми же значениями для целевых и действительных параметров. Элемент управления поддерживает список своих прикрепленных целей и действий по [с] событиями, поддерживаемыми каждым из них.

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

Указание значения 0 для параметра controlEvents не препятствует отправке событий ранее зарегистрированному целевому и методу действий. Чтобы остановить доставку событий, всегда вызывайте метод removeTarget: действие: forControlEvents:.