2009-05-26 5 views
8

Ich habe das noch nicht ausprobiert, aber ich nehme an, dass ich das Scrollen der Parent-Scroll-Ansicht deaktivieren müsste, sobald ich weiß, dass der Benutzer in der Child-Scroll-Ansicht scrollen möchte, richtig?Wie kann ich ein UIScrollView in einem UIScrollView verschachteln, so dass der Benutzer das innere UIScrollView scrollen kann?

Beide Scroll-Ansichten scrollen horizontal.

Wie kann ich die Scroll-Erkennung des Elternteils vorübergehend deaktivieren? Oder gibt es einen anderen Weg?

Antwort

9

UIScrollView hat eine Eigenschaft namens scrollEnabled, die Sie auf NO setzen können, um das Scrollen in der übergeordneten Bildlaufansicht zu deaktivieren.

Ich habe es noch nicht versucht, aber Sie können nur feststellen, dass es die richtige Sache, d. H. Die innere Bildlaufansicht scrollt, bis es nicht mehr scrollen kann, an welcher Stelle die äußere Bildlaufansicht scrollt.

+0

Hi Hatfinch, ich frage mich, wie ich das Standardverhalten verhindern könnte "die innere Bildlaufansicht scrollt, bis sie nicht mehr scrollen kann, an welcher Stelle scrollt die äußere Bildlaufansicht"? Ich wünschte, wenn der Benutzer die innere Ansicht scrollt, könnte die äußere Ansicht bleiben, selbst wenn die innere Ansicht bis zum Ende gescrollt wurde. – Hampotato

+0

Sie können sich für Delegaten-Rückrufe in der inneren Bildlaufansicht registrieren, indem Sie den Bildlauf in der äußeren Bildlaufansicht deaktivieren, wenn der innere Bildlauf beginnt, und erneut aktivieren, wenn der innere Bildlauf beendet ist. – hatfinch

+0

Ich sehe, vielen Dank! – Hampotato

0

tat ich dies und es macht die Eltern führen Scroll nicht mehr zu bewegen und das ist gut aber mein Kind Scrollview, die noch Ereignisse nicht über PresentModalViewController geschoben wurden reagieren blättern (zum Beispiel Scrollen nach oben oder nach unten). Ich vermisse offensichtlich etwas ...

BEARBEITEN: Hat es endlich funktioniert mit 'scrollEnabled' in der Elternansicht. Vielen Dank.

0

Ich hatte das gleiche Problem, bis ich dynamisch genug Höhe zur Content des inneren Scrollview, indem festgelegt: die ganzen

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,600)]; 

Offensichtlich ist dies nur ein hartkodierte Beispiel ist, sollten Sie die Höhe eingestellt benötigte anzuzeigen Inhalt der Ansicht, und vielleicht wird am Ende keine Schriftrolle benötigt.

Es scheint, dass die Höhe der scrollView mit dem IBuilder nicht genug ist, so dass kein Scroll benötigt wurde und deshalb dachte ich, dass das Sweep-Ereignis nicht die innere Scroll erreichte.

Hoffe, das hilft!

1

Es ist sehr möglich. Der einfachste Weg ist, die scrollEnabled Eigenschaft zu deaktivieren, können Sie auch versuchen, die äußere UIScrollView 's contentSize auf seine Grenzen, so dass es nicht scrollen. Je nachdem, was Sie benötigen, können Sie No auch auf bounce setzen, aber das wird Ihre Scrollansicht im Grunde wie eine normale UIView aussehen lassen.

Wenn Sie Kind haben die Kontrolle über alle UIScrollView ‚s, können Sie UIScrollViewDelegate Protokoll implementieren, aber wenn Sie das nicht tun, oder Ihr Kind UIScrollView ist wirklich ein UITableView oder UICollectionView, dann können Sie nicht wirklich verlassen, um die UIScrollViewDelegate Protokoll, aber denken Sie daran, UIScrollView kommt mit einem panGestureRecognizer und Sie können damit spielen. Eine mächtige, aber schwere Methode ist es, einen Beobachter auf die panGestureRecognizerstate Eigenschaft hinzuzufügen, so dass Sie alle Ereignisse erfassen können, ohne der Delegierte der UIScrollView in Frage zu sein.