When the user taps and holds down a UIButton in my app, after a while a UIControlEventTouchCancel event is fired. The Apple documentation for UIControl doesn't have any detailed explanation about this event. Why is it triggered? What is it used for?
[button addTarget:key action:@selector(keyUp:) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:key action:@selector(keyUp:) forControlEvents:UIControlEventTouchUpOutside];
[button addTarget:key action:@selector(keyCancel:) forControlEvents:UIControlEventTouchCancel];
[button addTarget:key action:@selector(keyDown:) forControlEvents:UIControlEventTouchDown];
According to the documentation, a
UIControlEventTouchCancel
event is due to:Therefore, it's not due to user input that the touch has ended, it's due to a system event (such as a low memory warning, or the app moving into the background). I have no idea why you are able to trigger it from simply pressing and holding on the button.
I'm pretty sure it's a similar (if not caused by the) event to the
UIResponder
'stouchesCancelled:withEvent:
event. The documentation on this is slightly more detailed:One scenario is the screen rotation. If you rotate your screen while holding down the button you will get a touch cancel event.