целевое действие uicontrolevents

Я должен пропускать что-то очевидное здесь, но...

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;
13
задан skaffman 2 May 2011 в 16:26
поделиться

1 ответ

Когда вы создаете свой 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;
     }
 }
0
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: