多層view時delegate爲nil的問題解決

1.問題描述:我在一個tab的DashboardController頁面上增加了一個包含兩個頁面大小的UIScrollView實現左右滑動分頁效果,

然後在UIScrollView的左右兩頁都分辨包涵了一個自定義的繼承UIViewController的子頁面ChildViewController,

在ChildViewController頁面裏,我分別畫了四個圖,餅狀圖柱狀圖啥的,它們都需要做點擊事件處理,就需要用到委託。

其實用到委託的方式也十分簡單,將我的圖表view的delegate設置成一個繼承自ChartViewDelegate的對象,

在func chartValueSelected裏面做各種處理就可以了。

原諒我按web的思路來做分析,

我的層次結構由下到上,由底層到高層就是 DashboardController的view-UIScrollView-ChildViewController的view-圖表view

現在的問題是,

我將ChildViewController繼承ChartViewDelegate作爲委託,跟蹤代碼發現ChartViewDelegate內部實現的delegate爲nil,導致事件無法觸發。


2.解決過程:

      a.將ChildViewController中代碼放入單獨頁面,可以觸發。排除本身代碼問題干擾。

      b.ChildViewController中代碼放入單獨tab中,可以觸發。排除tab干擾。  

      c.ChildViewController中代碼放入單獨UIScrollView中,可以觸發。排除UIScrollView干擾。

走到這裏大概就猜想,應該是層次太多,委託的層次出了問題。


3.解決思路:將委託放入由上層的ChildViewController一層一層下移,放入到底層的DashboardController時,測試事件觸發成功。


4.結論:雖然我不知道具體原理,但是走到這裏我的想法大概是,即使是最頂層的事件委託,也要在最底層實現和捕捉。後續有了新的進展和學習成果,再來補充。我先去搬磚啦,麼麼噠!

發佈了38 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章