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

Как получить события UIButton Target, Action и Control?

Я использую UIImageView с UIButtons целым пучком. Итак, я создал специальный класс, чтобы надолго жениться на этих двух, чтобы сделать вещи немного проще. Все работает хорошо, пока я не решил реализовать - (id) initWithObject: (AUIImageViewButton *) imageViewButton.

Очевидно, мне нужно скопировать все соответствующие свойства из передаваемого объекта imageViewButton. UIImageView не является проблематичным вообще. Что-то вроде этого имеет дело с этим:

imageview = [[UIImageView alloc] initWithFrame:imageViewButton.imageview.frame];        // Copy all relevant data from the source imageview
[imagebutton.imageview setBackgroundColor:imageViewButton.imageview.backgroundColor];   //
[imagebutton.imageview setImage:imageViewButton.imageview.image];                       //

Большая часть кнопок также доступна:

button = [UIButton buttonWithType:imageViewButton.button.buttonType];                   // Copy all relevant data from the source button
button.frame = imageViewButton.imageview.frame;                                         // 
[button setTitle:imageViewButton.button.titleLabel.text forState:UIControlStateNormal]; //
button.tag = imageViewButton.button.tag;                                                //

У меня возникли небольшие проблемы с выяснением того, как получить все данные для метода addTarget: action: forControlEvents.

Глядя на документы, я вижу, что могу использовать UIControl allControlEvents и allTargets. Я сейчас прикочусь к этому вопросу и посмотрю, как много проблем я могу получить. Я не уверен, что это действие.

Кто-нибудь может дать мне толчок в правильном направлении?

Спасибо,

-Martin

4b9b3361

Ответ 1

UIControl allTargets и allControlEvents - это способ запуска. Последняя часть головоломки actionsForTarget:forControlEvent:, назовите ее один раз для каждой цели и события.

Ответ 2

Показывает, как выполнять итерацию по целям и создавать копии селектора на другой кнопке. Конкретный пример - это только событие touchupinside, но обычно это все, что я использую.

for (id target in button.allTargets) {
     NSArray *actions = [button actionsForTarget:target
                                      forControlEvent:UIControlEventTouchUpInside];
     for (NSString *action in actions) {
          [newButton addTarget:target action:NSSelectorFromString(action) forControlEvents:UIControlEventTouchUpInside];
     }
}

Ответ 3

Я использовал это, чтобы удалить любую возможную нежелательную цель/действие перед назначением нового:

if let action = button.actions(forTarget: target, forControlEvent: .touchUpInside)?.first
{
    button.removeTarget(target, action: NSSelectorFromString(action), for: .touchUpInside)
}

или если вы действительно хотите удалить все действия:

if let actions = button.actions(forTarget: target, forControlEvent: .touchUpInside)
{
    for action in actions
    {
        button.removeTarget(target, action: NSSelectorFromString(action), for: .touchUpInside)
    }
}