您的位置:首页 > 产品设计 > UI/UE

定制可隐藏seperator的UITableViewCell

2015-04-23 09:53 211 查看
问题描述:

在iOS的app开发中碰到这样的需求:

隐藏UITableView中相邻两个section的separator——即隐藏上方section最下面的separator,以及下方section最上面的seperator。

困难分析:

separator是UITableView的属性,而不是cell、section的属性(但相关属性定义在UITableViewCell.h中),因此无法直接修改seperatorStyle来达到目标。

解决的思路是,隐藏UITableView的separator

tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
然后根据cell位置的不同,选择性地在cell中人为绘制separator

实现:

具体实现时有多种办法可供选择:

1. 在xib/storyboard文件中构造自定义cell,在data source中以如下方式进行复用cell = [tableView dequeueReusableCellWithIdentifier:@"custom_cell"];
优点:思路清晰,实现简单
缺点:每个viewController都需要构造cell,而且界面和逻辑耦合严重。

2. 新建cell类,通过参数控制cell绘制separator的位置

cell = [[DriftyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil seperatorStyle:DriftyTableViewCellHideNoSeperator];
优点:逻辑与界面完全解耦,可定制化程度高

缺点:如果要在cell中加入其它元素,如textfield,就必须通过代码添加

3. 让xib/storyboard中的cell继承自定义cell类

优点:结合了xib可视化和代码可定制化的优点

缺点:实现遇到了bug。该思路需要重写自定义cell的initWithCoder方法,在该方法中初始化separotor的位置、颜色、粗细等等。然后在data source中可以

cell = [tableView dequeueReusableCellWithIdentifier:@"Cell_B"]; 但是实现出来发现separator只会在cell的两边出现(在公司贴不了图)。尝试后发现,修改xib文件中的cell背景,使其不是default即可正确显示,暂时不知道原理是什么。

第三种方式是目前采用的方式,在定制其他类型的控件时,也可以使用该方法,以减少代码量、提高控件的可定制度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 控件