iOS基础

UITableViewCell里UIButton实现push的代

2016-10-07  本文已影响477人  天堂秀

TableView上面有多个HotTableViewCell,cell上面显示的是文字信息和一个详情Button,点击button以后push到一个新的页面。为什么说这个场景用到了代理delegate?因为button是在自定义的CustomTableViewCell上面,而cell没有能力实现push的功能,因为push到新页面的代码是这样的,

[self.navigationController pushViewController...];

所以这时候CustomTableViewCell就要委托它所在的Controller去做这件事情了。

按照我的编码习惯,我喜欢把委托的协议写在提出委托申请的类的头文件里面,现在的场景中是HotTableViewCell提出了委托申请,下面是简单的代码,

上面的代码在CustomTableViewCell.h中定义了一个协议HotTableViewCellDelegate,它有一个需要实现的pushToNewPage方法,然后还要写一个属性修饰符为weak(纠错:原来用的assign、名为delegate的property,之所以使用weak是因为这涉及到内存管理的东西,以后的博客中我会专门说明原因。

接下来在CustomTableViewCell.m中编写Button点击代码,

[self.detailBtnaddTarget:selfaction:@selector(btnClicked:)forControlEvents:UIControlEventTouchUpInside];

对应的btnClicked方法如下,

上面代码中的判断条件最好是写上,因为这是判断self.delegate是否为空,以及实现CustomCellDelegate协议的Controller是否也实现了其中的pushToNewPage方法。

接下来就是受到委托申请的类,这里是对应HotTableViewCell所在的ViewController,它首先要实现CustomCellDelegate协议,然后要实现其中的pushToNewPage方法,还有一点不能忘记的就是要设置CustomTableViewCell对象cell的delegate等于self,很多情况下可能忘了写cell.delegate = self;导致遇到问题不知云里雾里。下面的关键代码都是在ViewController.m中,

首先是服从HotTableViewCellDelegate协议,这个大家肯定都知道,就像很多系统的协议,例如UIAlertViewDelegate、UITextFieldDelegate、UITableViewDelegate、UITableViewDatasource一样。

还有一个步骤最容易被忘记,就是设置HotTableViewCell对象cell的delegate,如下代码,

通过cell.delegate = self;确保了CustomTableViewCell.m的判断语句if(self.delegate && ...){}中得self.delegate不为空,此时的self.delegate其实就是ViewController,cell对象委托了ViewController实现pushToNewPage方法。这个简单的场景描述了使用代理的一种情况,就是CustomTableViewCell没有能力实现pushViewController的功能,所以委托ViewController来实现。

由于做项目时间比较赶,借鉴了一下博主的文章

主要参考博主http://blog.csdn.net/a632407036/article/details/42968547

最后!欢迎加入iOS技术大群,学习知识交更多的同行朋友            QQ群号:580284575

QQ群二维码

上一篇下一篇

猜你喜欢

热点阅读