2013-08-06 3 views
2

Я понимаю, что можно добавить событие UIControlEventTouchUpInside к определенному объекту, но как я могу добавить это событие для всего класса?Objective-C ad UIControlEventTouchUpInside событие для класса

Я создал объекты с классом ElementButton, и я не хочу проходить и добавлять событие для каждого отдельного объекта, так как это приведет к большому количеству ненужного кода.

ответ

0

Try добавляя все ElementButtons в массиве и пройти через них в for loop:

for (ElementButton *yourButton in myArray) { 
    [yourButton addTarget:self selector:@selector(buttonTapped:) forEvent:UIControlEventTouchUpInside]; 
} 

Чтобы получить все ElementButtons сделать:

for (ElementButton *button in [self.view subviews]) { 
    if(!yourArray) yourArray = [[NSMutableArray alloc]init]; 
    [yourArray addObject:button]; 
} 
+0

Это решение будет работать лучше всего, так как массив всех объектов будет очень полезен позже. Спасибо! – jrkolsby

3

Что вы имеете в виду, это реализация iOS чего-то, называемого целевым действием . Целевое действие доступно только для подклассов UIControl, поэтому, если ваш ElementButton является подклассом UIControl, вы не можете использовать UIControlEventTouchUpInside.

Если это на самом деле подкласс UIControl, вам не нужно делать какие-либо дополнительные работы, кроме регистрации на UIControlEventTouchUpInside для каждого объекта:

[yourButton addTarget:self selector:@selector(buttonTapped:) forEvent:UIControlEventTouchUpInside]; 

Позвольте мне знать, если у вас есть какие-либо другие вопросы.

+0

Я думаю, что это, добавив метод действия для каждой кнопки в отдельности - это то, что пытается избежать ОП. – rdelmar

+0

Да, я бы предпочел, чтобы один метод был установлен в ElementButton.m, который заботился обо всех объектах. Их было 118, и было бы неплохо повторить один и тот же код 118 раз. – jrkolsby

+0

Ну, чтобы использовать целевое действие, вы должны называть '-addTarget ... 'так или иначе. Я не знаю, как его использовать. –

0

Вам не нужно, чтобы добавить метод для класса или добавьте метод индивидуально к каждому из них. Используйте цикл, чтобы пройти через все ваши кнопки и использовать addTarget: selector: forEvent: назначить метод каждому из них. Вы можете использовать коллекцию розетки, которая даст вам массив для циклического перехода, или вы можете просто пропустить все подпункты супервизора этих кнопок (проверяя, соответствует ли subview подходящему классу).

1

Попробуйте: -

Добавить этот метод ElementButton класс:

-(id)initWithFrame:(CGRect)frame 
{ 
self = [super initWithFrame:frame]; 

[self addTarget:nil action:@selector(ownMethod) forControlEvents:UIControlEventTouchUpInside]; 

if (self) { 
    // Initialization code 
} 
return self; 
} 

ownMethod который вы хотите звонить с UIControlEventTouchUpInside в любом классе

Смежные вопросы