Как получить события 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's 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's button
button.frame = imageViewButton.imageview.frame; //
[button setTitle:imageViewButton.button.titleLabel.text forState:UIControlStateNormal]; //
button.tag = imageViewButton.button.tag; //
У меня возникли небольшие проблемы с выяснением, как получить все данные для метода addTarget:action:forControlEvents.
Глядя на документы, я вижу, что могу использовать методы allControlEvents и allTargets в UIControl. Я сейчас покопаюсь в этом и посмотрю, сколько неприятностей я могу получить. В чем я не уверен, так это в действии.
Кто-нибудь может дать мне толчок в правильном направлении?
Спасибо,
-Мартин
3 ответа
UIControl-х allTargets
а также allControlEvents
способ начать. Последний кусок головоломки actionsForTarget:forControlEvent:
Назовите это один раз для каждой цели и события.
Показывает, как перебирать цели кнопки и создавать копии селектора для другой кнопки. Конкретный пример - просто событие 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];
}
}
Я использовал это, чтобы удалить любую возможную нежелательную цель / действие перед назначением новой:
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)
}
}