轮播图+tableView的问题

自学iOS的过程中,会遇到各种问题,这几天也遇到了一个开发中难免会遇到的问题:轮播图+tableView的时候,轮播图应该怎么设计才好呢?

错误的设计思路:

一开始吧,我觉得tableView有headerView这个属性,我就再自定义一个view来填充headerView不就行了吗(这里针对的是纯代码布局),想法是好的,但是headerView的本质就是一个UIView啊,而图片轮播(这里暂时用UIScrollView)的代理需要控制器才能执行,所以没办法执行轮播时候UIScrollView的代理方法啊。
有的人说,简单啊,把控制器传进来就行了。但是…TableView也遵守了UIScrollView协议了,这时候,你传进去的控制器到底要执行谁的UIScrollView协议呢?控制器默认会执行TableView的协议,而不会去执行自定义view里面的轮播图的UIScrollView协议。
这时候,又有人会说,把轮播图的ScrollView的代理方法放到TableView的ScrollView的代理方法里面不就行了。是可以,但是,你在ScrollView代理方法里面设置了轮播图的播放顺序或者什么其他操作的话,你拖动TableView轮播图也会受到影响。
所以,这种设计是有问题的。
不过,自定义的view是用xib来加载的话,就不会有任何问题。也就是说,TableView的headerView用一个自定义的view来填充,而这个view是通过xib来加载的。不过我个人喜欢用纯代码布局,下面就不赘述xib加载的方式。


可行的设计思路:

思路一:自定义一个类并实例化对象,这个类继承UIView,然后定义一个view,把scrollView加入到view里面(其实我多此一举了,可以直接把scrollView加入这个类中就可以了)。然后把这个对象加入到tableView里面。
HeaderView *headerView = [[HeaderView alloc] init];
headerView.frame = CGRectMake(0, -CGRectGetHeight(headerView.myFrame), CGRectGetWidth(headerView.myFrame), CGRectGetHeight(headerView.myFrame));
[self.tableView addSubview:headerView];

思路二: 还是自定义一个类并且实例化对象,这个类继承UIView,然后把UICollectionView加入到这个对象中。然后再把这个对象加入到tableView里面
代码和上面差不多,这里就不重复了。具体代码可以点击下面的github地址来参考。


总结

上面两种思路,都有相似之处,就是都把自定义的UIView都加入到TableView中即可。而我之前错误的设计是把自定义UIView赋值给tableView.headerView。原因:因为tableView.headerView的级别属于tableView,此时scrollView的代理就不会被执行。这个控件加入到tableView中,那么就是不同的控件了,就不会引起冲突。
思路一代码参考:https://github.com/HZhenF/Shopping.git
思路二代码参考:https://github.com/HZhenF/Shopping1.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值