※ 引述《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 之前,自己刻一个简单排列样式的辛路历程