2011-08-23 61 views
0

我試着閱讀關於類似情況的其他問題,但沒有運氣,所以這裏有一個問題。 我有一個嵌套的UIScrollView的設置,雖然滾動都很好,但我似乎沒有任何委託事件。嵌套UIScrollViews和獲取信息,當滾動發生

外部UIScrollView分頁並垂直滾動。裏面我有多個水平滾動分頁UIScrollViews「行」。現在,我想要的是在垂直滾動發生時強制內滾動器到特定位置。

我讓ViewController成爲一個委託,並調用scrollViewDidScroll,但它只會在最初設置滾動條時觸發,而不會觸發設備並滾動網格。

我正在監聽內部和外部滾動器,並且他們都忽略了在設備上滾動時觸發任何事件。

我對Obj-C和Cocoa開發人員相當陌生,所以我可能會完全錯過某些明顯的東西,但任何幫助表示讚賞。

回答

2

我創建了一個小測試項目,它似乎一切正常。請確保調用的所有scrollViews的​​(假設控制器本身是委託。除此之外,始終確保scrollViews比他們的幀更大contentSize,如果沒有的話scrollDidScroll:不應該開火的。

我的小項目基本上有一個指向外部scrollView和所有內部scrollViews的NSArray,每次外部滾動(只有在scrollViewDidScroll:委託方法中有一個小檢查)我簡單地遞歸地將所有內部scrollViews的contentOffset更改爲CGPointMake(0.0, 0.0)

這不是最優化的方法,因爲實際上只有以前可見的scrollView需要重置(所有其他o無論如何,nes應該已經在這個偏移量)。另外,作爲一個附註,根據內部scrollView的數量,這種將它們全部添加到外部scrollView的方法可能會嚴重損害性能(應用程序需要在內存中包含所有子視圖),因此您可能需要考慮重新使用scrollViews (Apple示例項目PhotoScroller在重用UIScrollView中的子視圖時有一些巧妙的技巧,它們基本上模仿了UITableView的工作方式)。

如果您有任何其他問題,請讓我知道我會發布示例項目。

+0

謝謝,我其實是做錯了。我錯過了setDelegate部分,現在一切似乎都很好。我結束了使用scrollViewDidEndDecelrating,但點仍然有效。 – margusholland