※ 引述《iphone7pro (i7pro)》之銘言:
: 最近在寫類似UITableViewDataSource numberOfRowsInSection
: 當我的元件在init的時候會去執行delegate
: 我在viewController實在這個delegate的時候
: 會發現我return 的時候是nil
: 想請問大大們應該怎麼去設計?
原文描述的問題的確是有點模糊,
如果原文作者要問的問題是:
想做一個 繼承 UIView 的子類,
其子類具有類似 UITableView 的 DataSource Protocol,
讓 delegate 引用 (例如 numberOfRowsInSection)
該怎麼設計?
(原 PO 嘗試的結果是 , delegate 抓到回傳結果是 nil)
我個人就曾經有過上述的問題,
如果原 PO 問的是這個,
在下在此提出個人的心得...
以 UITableView 為例,
它有個方法 reloadData,
每次執行的時候,
會讓它的 delegate (教學通常用 ViewController 作為它的 delegate)
先跑一次 numberOfRowsInSection 取得數量(count),
然後透過 tableView:cellForRowAtIndexPath
讓 delegate 依照 0 -> count-1 產生 UITableView Cell,
tableView 接收到從 delegate 傳回的 cell 之後
做一些動作(如顯示出來)
所以,參考 UITableView 的做法,
該怎麼設計一個 UIView 子類?
你可以模仿 UITableView 的 reloadData 方法
(假設就叫 reloadData 好了)
並保證這個 reloadData 方法在子類產生實例(Instance)的階段,
就至少被呼叫一次(reloadData)
(看是 init / initWithFrame / layoutSubviews / awakeFromNib / ...,
這幾個地方用途不一樣,用在哪裡不一定,依介面功能而定,
使用上要特別小心,請自行嘗試,此不多解釋)
然後在這個自訂 reloadData 方法內,
讓 delegate 去執行 DataSource Protocol
(如 numberOfRowsInSection 取得數量),
你必須保證在此之前,delegate 就已經有數量可以回傳,
不然就可能是 nil 或可能出現其他問聽。
以上是 個人心得 &
還沒有 UICollectionView 之前,自己刻一個簡單排列樣式的辛路歷程