2016-11-14 10 views
0

В приложении у меня есть несколько динамических кнопок, которые создаются и добавляются в UITableView, каждая кнопка имеет сенсорное событие (UIControlEventTouchUpInside) и длинный жест нажатия (UILongPressGestureRecognizer), я хочу выполнить любое действие за раз. Поэтому, если пользователь прикасается к действию только кнопки, это будет вызов. И если пользователь долго нажимал, тогда будет вызываться длинное событие.Как обрабатывать события касания и события жестов на UIButton?

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

Что мне делать с этими событиями? Любые хорошие предложения?

+0

Дубликат: http://stackoverflow.com/questions/30859203/uibutton-with-single-press-and-long-press-events-swift – Frankie

+2

Возможный дубликат [UIbutton with longpress и Touchup внутри] (http://stackoverflow.com/questions/6660282/uibutton-with-longpress-and-touchup-inside) –

ответ

0

Чтобы не вызвать как следует флаг кнопку с глобальной переменной или тега, так что в мишени UIControlEventTouchUpInside вы можете фильтровать действия.

Итак, давайте предположим, что ваш UILongPressGestureRecognizer звонит longPress при пожарах, и он инициализируется в вашей специальной ячейке . & UIControlEventTouchUpInside вызывает целевую btnPressed

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; 
[self.button addGestureRecognizer:longPress]; 
[self.button addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; 

Selector вызова внутри пользовательской ячейки:

-(void)longPress:(UIButton*)btn 
{ 
    // Flag the button, 
    self.button.tag = 1; 

    // Do LongPress stuff. 

} 

целевой кнопки для UIControlEventTouchUpInside

- (void)btnPressed:(id)sender { 

    UIButton *senderButton = sender; 

    if(senderButton.tag == 1) { 
     // Long press has been executed, set back the flag to 0 
     senderButton.tag = 0; 
    } else { 
     // Long press not executed 
     // Do the TouchUpInside stuff. 
    } 
} 
0

В cellForRowAtIndex из Tableview использовать этот код:

[cell.btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; 

И вне cellForRowAtIndex реализации этого метода.

-(void)btnPressed:(UIButton*)btn 
{ 
    //Do whatever 
} 
0

И долгое пресс использовать этот код

`UILongPressGestureRecognizer` *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; 
    [cell.button addGestureRecognizer:longPress]; 

и длительное нажатие метода является

-(void)longPress:(UIButton*)btn 
{ 
    //Do whatever 
} 
0

Вы можете добавить ниже код в случае действия кнопки. Я сделал этот код для нескольких флажков в tableview. С помощью этого кода вы можете получить IndexPath записи таблицы. Надеюсь, это работа для вас.

- (IBAction)btnPressed:(UIButton *)sender { 

CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.tblView]; 
NSIndexPath *indexpath = [self.tblView indexPathForRowAtPoint:touchPoint]; 
NSLog(@"%ld",(long)indexpath.row); 
}