在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范。总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用。用一个简单的例子来举例说明一下,其他交互类型与此类似,希望读者举一反三。

  需求:在一个cell上,当点击按钮时,将左侧的文字同样展示在右侧显示部分。

    

  这个需求,最主要的部分,就是获取所点击按钮的cell的问题,然后通过cell将左侧的label上的文字显示在右侧的label上。

  方法:

  (一)交互第一种:给cell的按钮tag赋值添加事件(不推荐);

  (二)交互第二种:通过代理delegate;

  (三)交互第三种:block

  解释:  

/** (不推荐)

*  (一)交互第一种:给cell的按钮tag赋值添加事件

*  做法:

*   1.给每一个cell上的按钮赋值tag;

*   2.在按钮事件中根据tag取出对应的cell

*   或者

*   1.根据按钮事件中的参数btn,开始回溯其父视图,直至找到对应的cell,这种情况在iOS7系列的系统上可能会出问题,可以查看我的另外一篇博客:http://www.cnblogs.com/xingxingLove/p/5183071.html

*/

cell.clickBtn.tag = 100 + indexPath.row;

[cell.clickBtn addTarget:self action:@selector(cellBtnClicked:) forControlEvents:UIControlEventTouchUpInside];

    

/**

*  (二)交互第二种:通过代理delegate

*   做法:

*   1.在cell中声明一个协议,协议方法中用来处理按钮点击事件

*   2.在控制器中遵守代理,实现代理方法

*   3.当cell中的按钮触发时,控制器中的代理方法得到响应

*/

cell.delegate = self;

/**

*  (三)交互第三种:block

*   做法:

*   1.在cell中声明block属性

*   2.在控制器中实例化时赋值调用

*/

cell.CustomTableViewCellBlock = ^(CustomTableViewCell *cell, UIButton *button){

NSIndexPath *indexPath = [self.demoTableView indexPathForCell:cell];

[cell valueText:self.demoSourceArr[indexPath.row]];

};

分析:

第一种:通过tag值来寻获当前的cell,相当于需要查询当前控制器中的所有view的tag值直至找到对应tag值的cell,效率低下,不容易进行协同维护,不推荐使用。

第二种:通过代理来实现,能够进行快速响应,消息接收灵敏。

第三种:通过block,更加简洁。

所以一般的话,推荐使用代理或者block来进行类似于这种视图之间的交互。

这里只是给出一些思路,demo中会有更加详细的解释,具体的demo可以查看我的Github:https://github.com/hanweixing/ViewReactDemo

视图交互--表视图(UITableView)的cell交互析略的更多相关文章

  1. 利用AutoLayout适配滚动视图和表视图

    1.新增一个contentView,设置为与滑动视图的父视图等高等宽. 2.利用代码 if(_MyTestTableView.frame.size.height != _MyTestTableView ...

  2. UI学习笔记---第十天UITableView表视图编辑

    UITableView表视图编辑 表视图编辑的使用场景 当我们需要手动添加或者删除某条数据到tableView中的时候,就可以使用tableView编辑.比如微信 扣扣中删除和某人的通话 当我们需要手 ...

  3. UI学习笔记---第九天UITableView表视图

    UITableView表视图 一.表视图的使用场景 表视图UITableView是iOS中最重要的视图,随处可见,通常用来管理一组具有相同数据结构的数据 表视图继承自UIScrollView,所以可以 ...

  4. iOS企业级开发初级课程-表视图(13集)

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

  5. UI学习笔记---第十一天UITableView表视图高级-自定义cell

    自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代 ...

  6. IOS开发中UITableView(表视图)的滚动优化及自定义Cell

    IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITable ...

  7. UITableView 表视图编辑

    UITableViewController(表视图控制器)继承自UIViewController,自带一个tableView self.view不是UIView而是UITableView dataso ...

  8. UITableView表视图以及重建机制

    表视图UITableView   表视图UITableView,是IOS中最重要的视图,随处可见 表视图通常用来管理一组具有相同数据结构的数据 UITableView继承自UIScrollView,所 ...

  9. UI:UITableView表视图

    表视图 UITableView,iOS中最重要的视图,随处可⻅见. 表视图通常⽤用来管理⼀一组具有相同数据结构的数据. UITableView继承⾃自UIScrollView,所以可以滚动,表视图的每 ...

随机推荐

  1. 让 PHP COOKIE 立即生效(不用刷新就可以使用)

    <?php function set_my_cookie($, $path = '', $domain = '') { $_COOKIE[$var] = $value; setcookie($v ...

  2. 使用 D8 分析 javascript 如何被 V8 引擎优化的

    在上一篇文章中我们讲了如何使用 GN 编译 V8 源码,文章最后编译完成的可执行文件并不是 V8,而是 D8.这篇我们讲一下如何使用 D8 调试 javascript 代码. 如果没有 d8,可以使用 ...

  3. 当网络中断的时候,JTA全局事务管理,究竟会不会回滚???

    前言:有人问了我一个问题,就是说在网络中断的时候,JTA的全局事务管理,会不会回滚?当时说会回滚,但没给对方说清楚理由,也不太认同我的观点.现在总结一下. 今天一天都在看文档(也查了一些博客和网站), ...

  4. EF知识和经验

    AsNoTracking提高查询性能 AsNoTracking的作用就是在查询的时候不做追踪,这样会查询的更快,但是这样做会有一个缺陷(不能对查询的数据做修改操作). var student2 = d ...

  5. 九度oj 题目1374:所有员工年龄排序

    题目描述: 公司现在要对所有员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你能写出这样的程序吗? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为一 ...

  6. 设计模式(四)建造者模式 Builder

    Builder: <Effective Java> 第2条:遇到多个构造器参数时要考虑用构建器. 建造者模式(Builder Pattern),也称生成器模式,定义如下: 将一个复杂对象的 ...

  7. Python Base Five

    // 8 day(2016/8/11) 38. In python , it is oop. class Baskball:         def setName(self, name):      ...

  8. css3实现连续不断的波浪

    给的波浪要比容器大,然后在左边准备一个相同的,注意,波浪头尾要能衔接起来,接着运动的长度为波浪的宽度,然后不断重复就好了

  9. cf 472G Design Tutorial: Increase the Constraints 分块+压位/FFT

    题目大意 给出两个\(01\)序列\(A\)和\(B\) 哈明距离定义为两个长度相同的序列中,有多少个对应位置上的数字不一样 "00111" 和 "10101" ...

  10. bzoj 4034 [HAOI2015]树上操作 入栈出栈序+线段树 / 树剖 维护到根距离和

    题目大意 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...