2013-03-27 3 views
5

Я хочу обработать событие, когда UIButton контакт закончился. Я знаю, что UIControl имеет некоторые события, реализующие прикосновения (UIControlEventTouchDown, UIControlEventTouchCancel и т. Д.). Но я не могу их поймать, кроме UIControlEventTouchDown и UIControlEventTouchUpInside.Как определить событие touch end для UIButton?

Моя кнопка является подвидным некоторым UIView. Этот UIView имеет userInteractionEnabled свойство установлено на ДА.

Что случилось?

ответ

21

Вы можете установить «целевые действия» для кнопки в соответствии с примером ControlEvents

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents; 

:

[yourButton addTarget:self 
      action:@selector(methodTouchDown:) 
forControlEvents:UIControlEventTouchDown]; 

[yourButton addTarget:self 
      action:@selector(methodTouchUpInside:) 
forControlEvents: UIControlEventTouchUpInside]; 

-(void)methodTouchDown:(id)sender{ 

    NSLog(@"TouchDown"); 
} 
-(void)methodTouchUpInside:(id)sender{ 

    NSLog(@"TouchUpInside"); 
} 
+0

О, он прекрасно работает. Моя невнимательность сыграла с нами жестокую шутку. Спасибо – Brain89

3

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

@interface customButton : UIButton 
{ 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

затем сделать свой файл реализации

+0

К сожалению, мой старший программист запретил создавать новый класс. Но это решение также работает правильно – Brain89

0

я думаю, что это более легко

UILongPressGestureRecognizer *longPressOnButton = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressOnButton:)]; 
longPressOnButton.delegate = self; 
btn.userInteractionEnabled = YES; 
[btn addGestureRecognizer:longPressOnButton]; 



- (void)longPressOnButton:(UILongPressGestureRecognizer*)gesture 
{ 
    // When you start touch the button 
    if (gesture.state == UIGestureRecognizerStateBegan) 
    { 
     //start recording 
    } 
    // When you stop touch the button 
    if (gesture.state == UIGestureRecognizerStateEnded) 
    { 
     //end recording 
    } 
} 
0

Просто добавьте IBOutlets для UIButton с событиями TouchDown: и Primary действий Triggered:

- (IBAction)touchDown:(id)sender { 
    NSLog(@"This will trigger when button is Touched"); 
} 

- (IBAction)primaryActionTriggered:(id)sender { 
    NSLog(@"This will trigger Only when touch end within Button Boundary (not Frame)"); 
} 
0

@ Ramshad-х принят answer в Swift 3,0 синтаксис используя следующий метод UIControl класса

open func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents) 

Пример:

myButton.addTarget(self, action: #selector(MyViewController.touchDownEvent), for: .touchDown) 
myButton.addTarget(self, action: #selector(MyViewController.touchUpEvent), for: [.touchUpInside, .touchUpOutside]) 

func touchDownEvent(_ sender: AnyObject) { 
    print("TouchDown") 
} 

func touchUpEvent(_ sender: AnyObject) { 
    print("TouchUp") 
} 
0

Swift версия 3.0:

let btn = UIButton(...) 

btn.addTarget(self, action: #selector(MyView.onTap(_:)), for: .touchUpInside) 

func onTap(_ sender: AnyObject) -> Void { 

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