最近笔者在公司的iOS开发中,有一个iOS开发同事跑来问了两个问题:1.给UITableView设置了组头和组尾视图,但是一直显示不出来?2.UITableView的section的header和footer视图,没有产品经理需要的悬停效果?针对于这2个问题,我详细的测试了一下,然后得出了如下结论。

针对于问题一,是因为对方创建UITableViewController的时候使用了错误的构造方法。如果用导航控制器pushUITableViewController类型的控制器,必须给定UITableView的style。如下所示,错误方式和正确方式:

// UITableViewController错误创建方式:
WSTableViewController *tableVC = [[WSTableViewController alloc] init];
[self.navigationController pushViewController:tableVC animated:YES]; // UITableViewController正确创建方式:
WSTableViewController *tableVC = [[WSTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
[self.navigationController pushViewController:tableVC animated:YES]; // 注意:很多初级iOS工程师创建UITableViewController的时候习惯用init,殊不知,UITableViewController与其他控制器不同,需要指定控制器的tableView的style。
// 另外,自定义UITableViewController需要重写init方法的时候,也不要傻乎乎的重写init方法,而是需要重写initWithStyle:方法。

针对于问题二,UITableView的style无论是plain还是grouped样式,都可以设置组头组尾视图(通过代理方法)。但需要注意的是,如果UITableView的style设置为grouped样式,那么组头和组尾视图没有悬停效果。相反,如果UITableView的style设置为plain样式,那么组头和组尾视图会有悬停效果。如下图1为plain样式下的悬停效果;图2为grouped样式下的非悬停效果。(PS:下图中的UITableView分为3组,每组10行)

                 

           图1                                                                图2

同理,组头标题和组尾标题也是如此。下图3为plain样式的效果,图4为grouped样式的效果。

                 

注意:对于组头组尾视图,如果控制器是作为子控制器被push或者modal的。那么如果被push或者modal的UITableViewController为UITableViewStylePlain样式,那么很遗憾,依旧不会显示组头和组尾视图。所以只能够设置为UITableViewStyleGrouped样式。那么问题又来了,组头组尾视图是有了,但是不能够悬停。

     对于组头组尾标题,不管控制器作为子控制器push或者modal出来的。UITableViewController为UITableViewStylePlain样式,会有悬停效果。如果被push的UITableViewController为UITableViewStyleGrouped样式,不会有悬停效果。

iOS之UITableView组头组尾视图/标题悬停的更多相关文章

  1. UICollectionView 自定义组头组尾的XIB方法

    UICollectionView的加载方式和Tableview很像,基本上加载的方法都差不多,尤其是它的数据源的方法和代理方法基本上类似,只不过是名字上有点细微的差别而已.这里面不赘述. 1. UIC ...

  2. Swift自定义头视图和尾视图

    var data: [[String]]! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup a ...

  3. iOS:UITableView相关(18-10-20更)

    UITableView用得较多,遇到的情况也较多,单独记录一篇. 一.零散的技巧 二.取cell 三.cell高度 四.导航栏.TableView常见问题相关 五.自定义左滑删除按钮图片 六.仅做了解 ...

  4. iOS自定义组与组之间的距离以及视图

    iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...

  5. iOS监听tableView组头切换事件

    - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...

  6. UICollectionview的头视图和尾视图

    UITableView有头视图和尾视图,那么UICollectionView有没有头视图和尾视图呢? 答案是有的. 1.新建一个类,必须继承自 UICollectionReusableView. 2. ...

  7. 关于MPEG2中的图像序列和图像组头GOP

    图像序列 图像序列是由图像组构成的,是随机存取段落. sequence_header_code – The sequence_header_code is the bit string ‘000001 ...

  8. iOS:核心动画之动画组CAAnimationGroup

    CAAnimationGroup——动画组 动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性说明: ...

  9. iOS基础 - UITableView的数据源(dataSource)和代理(delegate)

    UITableView的数据源(dataSource)和代理(delegate) UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少 ...

随机推荐

  1. java范型集合中的成员排序

    范型集合中的类是JsonObject,不是自定义类,如果是自定义类就直接取要比较的字段值. ArrayList<JSONObject> TList = new ArrayList<J ...

  2. dpkg:处理软件包dradis (--configure)时出错

    dpkg:处理软件包dradis (--configure)时出错!解决方案:1.将info文件夹更名%mv /var/lib/dpkg/info /var/lib/dpkg/info_old2.新建 ...

  3. Android 手机卫士3--设置中心

    1.要点击九宫格中的条目,需要注册点击事件 // 注册九宫格单个条目的点击事件 gv_home.setOnItemClickListener(new OnItemClickListener() { / ...

  4. 解决mysql too many connections的问题

    由于公司服务器上的创建的项目太多,随之创建的数据库不断地增加,在用navicat链接某一个项目的数据库时会出现too many connections ,从而导致项目连接数据库异常,致使启动失败. 为 ...

  5. git教程

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  6. js类型检测总结

    类型检测: 类和对象: Call,Apply,Bind

  7. Linux-ssh配置

  8. [转]ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

    在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll ...

  9. 做JavaWeb开发不知Java集合类不如归家种地

    Java作为面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.但是使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容 ...

  10. MP3文件ID3信息编辑器代码开源 - 开源研究系列文章

    上次把磁性窗体的源码开源了,这次就开源另一个程序源码:MP3文件ID3信息编辑器.这个源码也比较简单,关键在于获取和写入MP3文件的这个ID3的信息即可. 这个操作信息编辑的就封装在MP3ID3.ba ...