Я должен пропускать что-то очевидное здесь, но...
UIControl имеет метод
- (void)addTarget:(id)target action:(SEL)action forControlEvents: (UIControlEvents)controlEvents
который позволяет Вам добавить действие, которое назовут, когда любой из данных controlEvents происходит. ControlEvents являются битовой маской событий, которые говорят Вам, если касание понизилось, или внутри, или было перетащено и т.д., существует приблизительно 16 из них, Вас или их вместе, и позвоните, когда любой из них происходит.
Селектор может иметь одну из следующих подписей
- (void)action
- (void)action:(id)sender
- (void)action:(id)sender forEvent:(UIEvent *)
ни один из тех не говорит Вам, какова битовая маска события управления была. UIEvent является чем-то немного отличающимся, он связан с фактическим сенсорным событием и не делает (я думаю), содержат UIControlEvent. Отправитель (UIControl) не имеет способа найти события управления также.
Я хотел бы иметь один метод, который имеет дело со многими событиями управления, поскольку у меня есть некоторый общий код, независимо от которого произошли событие или события, но я все еще должен знать то, чем UIControlEvents были для некоторой определенной обработки.
Я пропускающий способ узнать то, что использовались UIControlEvents, когда действие назвали, или сделайте я действительно должен разделить свой код в
-(void)actionWithUIControlEventX;
-(void)actionWithUIControlEventY;
Когда вы создаете свой UIControl, установите значение для свойства тега. Затем в своей функции действия вы можете определить тег UIControl, который его вызвал, используя [тег отправителя]. Вот пример:
-(void)viewDidLoad {
UIButton *button1 = [[UIButton alloc] initWithFrame(CGRectMake(0.0,0.0,100.0,100.0)];
button1.tag = 42;
[button1 addTarget:self action:@selector(actionWithUIControlEvent:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button1];
UIButton *button2 = [[UIButton alloc] initWithFrame(CGRectMake(100.0,0.0,100.0,100.0)];
button2.tag = 43;
[button2 addTarget:self action:@selector(actionWithUIControlEvent:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button2];
}
-(void)actionWithUIControlEvent:(id)sender {
switch([sender tag]) {
case 42:
//Respond to button 1
break;
case 43:
//Respond to button 2
break;
default:
break;
}
}