作者benjenq (Ben(憋))
看板MacDev
标题Re: [问题] 如何写像TableViewDatasource的delegate?
时间Thu Jun 22 15:27:14 2017
※ 引述《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 之前,自己刻一个简单排列样式的辛路历程
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.47.190.123
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MacDev/M.1498116438.A.03D.html
※ 编辑: benjenq (114.47.190.123), 06/22/2017 17:46:51
1F:推 iphone7pro: 没错!!我就是这个问提~~~感谢大大分享!! 06/23 09:18