Ответ 1
UIControl allTargets
и allControlEvents
- это способ запуска. Последняя часть головоломки actionsForTarget:forControlEvent:
, назовите ее один раз для каждой цели и события.
Я использую 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
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)
}
}