UITableView的一些常用操作

--------------------------------------------------------------------------------------------

// 隐藏TableView中cell之间的分割线

tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

// 隔行显示不同的颜色
if (indexPath.row % 2 == 1)
{
        cell.backgroundColor = ......;
}

else

{
        cell.backgroundColor = ......;
}

--------------------------------------------------------------------------------------------

1. 一个View中要处理几个TableView时怎么办?

使用TableView的tag值做标记,来区分不同的TableView,然后在代理函数中用tag值区分.

typedef enum {

APP_TABLE_VIEW = 0x11,
    SIGN_TABLE_VIEW,
    
} EFlag;

UITableView *appTableView = ...;

appTableView.tag = APP_TABLE_VIEW;

UITableView *signTableView = ...;

signTableView.tag = SIGN_TABLE_VIEW;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.tag == APP_TABLE_VIEW)
    {
        // 分离出appTableView
    }
    
    if (tableView.tag == SIGN_TABLE_VIEW)
    {
        // 分离出signTableView
    }
    
    return nil;
}

2. 如何让选中的某个cell后快速的恢复到选中前的状态(选中时的灰色动态消失)?

本人用GCD的延时程序处理,当然可以使用performSelector:withObject:afterDelay:来执行延时操作,读者可以自己试试,很麻烦,很明显,能用简单的为啥还要用复杂的呢......

#pragma mark - 延时多少毫秒
- (void)delayTime:(int64_t)microSeconds inQueue:(dispatch_queue_t)queue
            block:(void (^)(dispatch_queue_t queue))block
{
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, microSeconds * USEC_PER_SEC);
    dispatch_after(popTime, queue, ^(void){
        block(queue);
    });
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        // 延时100ms后执行deselectRowAtIndexPath动画消失,注意,实在主线程中执行,别在后台线程执行
        [self delayTime:100 inQueue:dispatch_get_main_queue() block:^(dispatch_queue_t queue) {
            [tableView deselectRowAtIndexPath:indexPath animated:YES];
        }];
}

3. 自定义的cell中如果存在着UIButton,那如何将点击事件传递出去呢?

自定义cell后,将indexPath参数传递到自定义的cell中(NSIndexPath为cell的一个retain的属性),自定义的cell申明一个协议,里面提供了一个方法

- (void)touchEventAtIndexPath:(NSIndexPath *)indexPath;

......

@property (nonatomic, assign) id<AppTableViewCellDelegate>delegate; // 将事件传递出去

......

- (void)buttonsEvent:(UIButton *)button
{
    // 将点击事件传递出去
    [self.delegate touchEventAtIndexPath:_indexPath];
}

当然,也可以用block实现,以后补上

4. contentOffset在动画中设定了新值并执行了动画操作,在协议方法中scrollViewDidScroll:会执行多次吗?

这是在动画中来设置contentOffset的值来达到移动UIScrollView的效果

[UIView animateWithDuration:duration animations:^{
            CGPoint point = _mainScrollView.contentOffset;
            point.x = 0;
            _mainScrollView.contentOffset = point;
        }];

这是协议自身方法移动UIScrollView后会调用的方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  ......
}

经过测试,改变contentOffset的值并执行动画后,scrollViewDidScroll:仅执行一次,无论contentOffset的值改变了多少.

5. 自定义cell中能够设置自己的高度吗?如果不能设置高度,那怎么给cell中的各种视图布局?

高度是通过tableView:heightForRowAtIndexPath:方法来设置的,实际上,自定义cell的布局不受高度影响,只存在高度太低而遮盖住了要显示的内容而已.

6. 如何在指定的row上显示自定义的cell并能完整的重用呢?

如下例,在指定row为2的前提下,其步骤与正常使用是一致的,只是需要设置一个新的重用标示而已.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 2)
    {
        static NSString *my = @"my";
        MyTableViewCell *myCell = [tableView dequeueReusableCellWithIdentifier:my];
        if (myCell == nil)
        {
            myCell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                            reuseIdentifier:my];
        }
        
        return myCell;
    }
    else
    {
        static NSString *str = @"normal";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:str];
        if (cell == nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                          reuseIdentifier:str];
        }
        
        return cell;
    }
}

7. 一个UIScrollview中包含了几个UITableView,而某个UITableView中的自定义cell中包含了一个UIScrollview,左右滑动的手势切换这几个UITableView时,当手触发在这个cell时,其UIScrollview会得到响应吗?

这个cell的UIScrollview会得到响应,与最外层的UIScrollview互不影响.

UITableView与UIScrollView的一些问题(持续更新)的更多相关文章

  1. iOS:开发常用GitHub开源项目(持续更新)

    IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...

  2. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  3. Android精品资源汇总,10个源码(持续更新)

    最近一直在学习Android,在各大社区逛,总结下自己看到的一些不错的源码.希望可以给大家带来帮助. 1.Android精品源码:带动态效果的Button(按钮) 最喜欢各种效果的按钮了,没办法就是这 ...

  4. 神技!微信小程序(应用号)抢先入门教程(附最新案例DEMO-豆瓣电影)持续更新

    微信小程序 Demo(豆瓣电影) 由于时间的关系,没有办法写一个完整的说明,后续配合一些视频资料,请持续关注 官方文档:https://mp.weixin.qq.com/debug/wxadoc/de ...

  5. iOS系列教程 目录 (持续更新...)

      前言: 听说搞iOS的都是高富帅,身边妹子无数.咱也来玩玩.哈哈. 本篇所有内容使用的是XCode工具.Swift语言进行开发. 我现在也是学习阶段,每一篇内容都是经过自己实际编写完一遍之后,发现 ...

  6. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

  7. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  8. 基于android studio的快捷开发(将持续更新)

    对于Android studio作为谷歌公司的亲儿子,自然有它的好用的地方,特别是gradle方式和快捷提示方式真的很棒.下面是我在实际开发中一些比较喜欢用的快速开发快捷键,对于基本的那些就不多说了. ...

  9. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

随机推荐

  1. 使用Kafka、Elasticsearch、Grafana搭建业务监控系统(三)Elasticsearch

    https://blog.csdn.net/tonywu1992/article/details/83576863

  2. mysql 闪回测试

    由于前面出现过几个需求,或者误操作,或者测试,需要我把某张表恢复到操作之前的一个状态,前面在生产中有过几次经历,实在太痛苦了,下面是一张表被误删除了,我的步骤是: 1  用全备恢复整个库(恢复到其他环 ...

  3. .size和.empty

    坑爹的list容器size方法--为了splice居然把复杂度设计为O(N)? 能用empty的时候,不要用size empty可以保证常量复杂度,但list的size不保证 链表长度必须要遍历全部的 ...

  4. 【51nod】1822 序列求和 V5

    题解 我是zz吧 nonprime[i * prime[j]] = 0 = = 还以为是要卡常,卡了半天就是过不掉 我们来说这道题-- 首先,我们考虑一个\(K^2\)做法 \(f_{k}(N) = ...

  5. 二、 sql*plus常用命令

    一.sys用户和system用户Oracle安装会自动的生成sys用户和system用户(1).sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户 ...

  6. 7-10 守卫棋盘 uva11214

    输入要给n*m的棋盘  均小于10   某些格子有标记  用最少的皇后  辐射到所有的标记 限时 6666ms 用IDA*    时间6000  尴尬. #include<bits/stdc++ ...

  7. ecshop,大商创后台设置增加字段方法

    使用场景:在开发过程中有时是需要在后台增加一个参数 例如: 必须要改数据库和源码的 1,在数据库中增加一条数据 数据库名称:shop_config 2:后台语言包

  8. MySQL性能优化(七·下)-- 锁机制 之 行锁

    一.行锁概念及特点 1.概念:给单独的一行记录加锁,主要应用于innodb表存储引擎 2.特点:在innodb存储引擎中应用比较多,支持事务.开销大.加锁慢:会出现死锁:锁的粒度小,并发情况下,产生锁 ...

  9. poj2387- Til the Cows Come Home(最短路)

    此为转载:http://blog.csdn.net/wangjian8006: 题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 解题思路: 模版题,这题要 ...

  10. Windows10怎么架设局域网DNS服务器?

    已采纳 需要安装Windows组件进行设置.最好是安装服务器版本的Windows. 1. 安装DNS服务 开始—〉设置—〉控制面板—〉添加/删除程序—〉添加/删除Windows组件—〉“网络服务”—〉 ...