UITableViewCell 做网络请求会有什么问题?

我是自定义cell uibutton都是在cell里面的,业务上需求点击uibutton,做请求提交数据.,就不知道在cell里面做网络请求,请求完就用cell拿tableView再调reload,还是说只能写delegate给VC?UITabelView上显示的都是用户待处理的事件,点击Button后,告诉服务器该事件已处理,tableView和后端都删除该事件列表,就不知道能不能把事件和请求写在cell里面,因为button是addSubview cell上的

1.MVC设计模式的话,你不在控制器做跑view做肯定是违反设计原则的。其实你真要在view做也没有人拦你,但cell确实不行,因为cell是重用的,你不知道下一个状态的cell还是原来的cell内容。你可以非常牛逼的写在uitableview里面就没问题了,既在view里面写,tableview实例还非常稳定的等待回调。
2.如果说是单纯的提交数据那还是建议不进行reload,因为可能根据你的tableView的复杂程度reload效率会不一样,如果效率可以是可以进行reload的。如果说你的功能是例如点赞这样的,一般会这样处理,会把数据提交和ui更改分开来做,也就是你向服务器提交数据是一个操作,在ui上,本地将数目加1是另一个操作
3.我觉得比较好的是:1、cell可以设计一个委托,在cell的button的点击事件里面,让委托对象执行delegate方法。这样不仅仅是button点击,其他的事件也可以使用这个委托来做,因为具体做什么是delegate方法的实现来决定的2、在VC实现delegate方法,如果有专门做网络请求的类,可以在这个方法里面让网络请求的类去实现数据提交。这样委托方法的实现还可以用来做其他事,各个对象实现自己的功能,互相不影响
4.你拖动也会触发reload的,除非锁住tableview不让碰。主要是回调完,delegate要及时置空。你已经锁了问题到不大,但肯定不是一个好的设计。只要你锁了,结果应该是正确的。但是写程序不是要追求结果正确,而是尽量追求设计的可适应。比如换了一个情况,不能锁,你这个设计可能就存在缺陷了,还需要重新设计,但是如果放到控制器做,无论锁不锁都是可适应的。

http://www.cocoachina.com/bbs/3g/read.php?tid=248833

你可能感兴趣的:(UITableViewCell 做网络请求会有什么问题?)