On Feb 19, 2011, at 7:48 PM, Quincey Morris wrote:

> On Feb 19, 2011, at 16:25, Peter Lübke wrote:
> 
>>> My question is this: how do I get the scroll view to ignore scrolling 
>>> messages?  The tables/scrollviews are sitting on views that are part of a 
>>> homebrew collection view, and the scrolling "catches" on them, even though 
>>> there's no scrolling to be done.  The scroll view is taking the events, but 
>>> there is nothing for them to do. I want to be able to scroll past the table 
>>> using a scrollwheel or the trackpad without the scrolling action "catching."
>>> 
>> 
>> What do you mean with "scroll past the table"?
> 
> I'm pretty sure the OP is talking specifically about scrolling with the 
> scroll wheel. (It sounds like the individual table views in his view 
> collection don't have scroll bars, and are sized to show all their content 
> anyway.) In that case, the table views or scroll views are still responding 
> the scroll wheel, which prevents the collection view itself from scrolling.
> 
> I think the only way to fix this is to override the appropriate 
> 'scrollWheel:' event method, and to pass the event on up the responder chain.

I have the same requirement as the OP: a scroll view that never needs to 
actually scroll, but which nevertheless eats scrollWheel: events, which keeps 
*its* containing scroll view from getting them. My solution was exactly as you 
describe. For the inner scroll view I use a subclass of NSScrollView that 
overrides scrollWheel: by sending scrollWheel: to its nextResponder, causing 
the outer scroll view to eventually get it. You can use IB to set the class of 
the inner scroll view to the subclass.

I wonder if this is worth a Radar: "If a scroll view doesn't actually do 
anything in response to a scrollWheel: event, it should forward the event to 
nextResponder." This seems to me to be what the responder chain is *for*.

I notice WebKit does the expected thing with nested scroll views (for example 
in a typical web mail window in Safari). This includes cases where the inner 
scroll view *can* scroll. I actually find this annoying. In *this* case I'd 
prefer the scroll wheel to stop dead at the top or bottom. It's a Fitt's Law 
kind of thing for me; I want to be able to scroll, scroll, scroll to the bottom 
of a list and not have to be careful about scrolling so much that I shift the 
whole window contents around. But maybe arguments could be made the other way.

Anyway, you can get whatever behavior you need by overriding scrollWheel:.

--Andy

_______________________________________________

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