本文主要给大家介绍了如何实现一个可以无限循环的表视图的相关内容,分享出来供大家参考学习、下面来一起看看详细的介绍吧。
<强>先来看看效果:强>
- (void) layoutSubviews { (自我resetContentOffsetIfNeeded); (超级layoutSubviews); } - (void) resetContentOffsetIfNeeded { CGPoint内容偏移=self.contentOffset;//头部 如果(内容偏移。y & lt;0.0){ 内容偏移。y=self.contentSize。高度/3.0; }//尾部 else if(内容偏移。y祝辞=(self.contentSize。身高- self.bounds.size.height)) { 内容偏移。y=self.contentSize。高度/3.0 - self.bounds.size.height; } (自我setContentOffset:内容偏移); }
<强> 2,创建一个拦截器强>
@ interface SUTableViewInterceptor: NSObject @ property(原子、弱)id接收机; @ property(原子、弱)id中间人; @end
<强> 3,将拦截器设置为TableView子类的数据源强>
- (void) setDataSource:数据源(id<强> 4,在子类中实现需要加工处理的代理方法强>
——(NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection:也(NSInteger)节{ 自我。(self.dataSourceInterceptor actualRows==邮栈鷗ableView: tableView numberOfRowsInSection:也部分); 回归自我。actualRows * 3; } ——(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { NSIndexPath * actualIndexPath=[NSIndexPath indexPathForRow: indexPath。行%的自我。actualRows切口:indexPath.section]; [self.dataSourceInterceptor返回。接收机tableView: tableView cellForRowAtIndexPath actualIndexPath):; }<强> 5,在拦截器中转发消息(如果子类实现了代理方法,则转发给子类,如果子类没有实现,则转发给外部的代理)强>
@ implementation SUTableViewInterceptor # pragma马克-向前,响应覆盖 - (id) forwardingTargetForSelector (SEL): aSelector { 如果([自我。中间人respondstoselectorismemberofclass: aSelector])返回self.middleMan; 如果([自我。接收机respondstoselectorismemberofclass: aSelector])返回self.receiver; 返回(超级forwardingTargetForSelector: aSelector); } - (BOOL) respondstoselectorismemberofclass: (SEL) aSelector { 如果([自我。中间人respondstoselectorismemberofclass: aSelector])返回YES; 如果([自我。接收机respondstoselectorismemberofclass: aSelector])返回YES; 返回(超级respondstoselectorismemberofclass: aSelector); } @endiOS实现无限循环滚动的TableView实战教程