Как отсортировать порядок целей при использовании UIControl (в частности, UIButton)? - PullRequest
2 голосов
/ 12 января 2012

В моем приложении у меня есть несколько UIButtons, для которых я добавляю цели.

Оказывается, что сначала добавляется последняя добавленная цель, а затем оставшиеся цели.

Например, возьмите этот код:

[button addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];

[button addTarget:self action:@selector(someOtherAction:) forControlEvents:UIControlEventTouchUpInside];

Если бы я подправил внутри button, someOtherAction: был бы вызван раньше someAction.

Это не то, что я хочу. Я хочу отсортировать цели так, чтобы у меня была возможность подправить внутри этой кнопки сначала способность someAction:, а затем другое действие someOtherAction:

Я не уверен, с чего начать, стоит ли создавать подкласс и переопределять что-то в UIButton или, вернее, копать в UIControl?

Спасибо за помощь!

-Давид

Ответы [ 2 ]

1 голос
/ 12 января 2012

Самый простой (хотя и хакерский) способ сделать это - сделать копию всех селекторов действий, удалить их из цели, а затем снова добавить все из них, кроме того, который вы хотите сделать первым.

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

Какова ваша конечная цель, чтобы что-то произошло сначала?

Почему нельзя объединить оба действия в одно, которое выполняет селекторы в правильном порядке?

0 голосов
/ 13 января 2012

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

Один из возможных способов сделать это - переопределить методы -forwardInvocation: и -methodSignatureForSelector: прокси-объекта. Смотри http://developer.apple.com/library/mac/#samplecode/ForwardInvocation/Introduction/Intro.html

...