On Mar 29, 2011, at 4:25 PM, Matt Neuburg wrote:

> On Tue, 29 Mar 2011 11:20:31 -0700, Lou Zell <lzel...@gmail.com> said:
>> I have a subclass of UIButton, call it MyButton, that I would like to
>> function as a vanilla UIButton but also pass touch events to the next
>> responder (I'm interested in eventually getting the events in
>> UIViewController).  I can do something like this in MyButton:
>> 
>> -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
>> {
>> [[self nextResponder] touchesBegan:touches withEvent:event];
>> }
> 
> Don't do that. The way to pass touches up the responder chain is by calling 
> super. This will do exactly what you're after, I think.
> 
> However, as already implied, you might be better off with a different 
> architecture. It isn't at all clear why you'd do what you're describing. Let 
> the button act as a button. If you need further information about what's 
> going on, consider a gesture recognizer, perhaps, or just use the button's 
> control events. In any case there should be no need to interfere at the very 
> low level of the touches... responder methods. There are *many* ways to 
> interfere with aspects of touch delivery; they are quite interesting, but be 
> careful or you'll break something.
> 
> m.

Moreover, according to the Event Handling Guide for iOS,

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html

"Important: If your custom responder class is a subclass of UIView or 
UIViewController, you should implement all of the methods described in “The 
Event-Handling Methods.” If your class is a subclass of any other UIKit 
responder class, you do not need to override all of the event-handling methods; 
however, in those methods that you do override, be sure to call the superclass 
implementation of the method (for example, super touchesBegan:touches 
withEvent:theEvent];). The reason for this guideline is simple: All views that 
process touches, including your own, expect (or should expect) to receive a 
full touch-event stream. If you prevent a UIKit responder object from receiving 
touches for a certain phase of an event, the resulting behavior may be 
undefined and probably undesirable."

and, further down,

"Handling Events in Subclasses of UIKit Views and Controls
If you subclass a view or control class of the UIKit framework (for example, 
UIImageView or UISwitch) for the purpose of altering or extending 
event-handling behavior, you should keep the following points in mind:

- Unlike in a custom view, it is not necessary to override each event-handling 
method.
- Always invoke the superclass implementation of each event-handling method 
that you do override.
- Do not forward events to UIKit framework objects."

W._______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to